{"version":3,"file":"static/js/main.eaa080d1.js","mappings":"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R,CACE57X,MAAO,mBACP47X,KAAM,cAER,CACE57X,MAAO,mBACP47X,KAAM,cAER,CACE57X,MAAO,oBACP47X,KAAM,YAER,CACE57X,MAAO,qBACP47X,KAAM,cAER,CACE57X,MAAO,qBACP47X,KAAM,aAER,CACE57X,MAAO,qBACP47X,KAAM,QAER,CACE57X,MAAO,kBACP47X,KAAM,gBAER,CACE57X,MAAO,qBACP47X,KAAM,eAER,CACE57X,MAAO,qBACP47X,KAAM,cAER,CACE57X,MAAO,eACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,aAER,CACE57X,MAAO,qBACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,cAER,CACE57X,MAAO,mBACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,eAER,CACE57X,MAAO,qBACP47X,KAAM,gBAER,CACE57X,MAAO,qBACP47X,KAAM,cAER,CACE57X,MAAO,qBACP47X,KAAM,gBAER,CACE57X,MAAO,mBACP47X,KAAM,gBAER,CACE57X,MAAO,kBACP47X,KAAM,SAER,CACE57X,MAAO,qBACP47X,KAAM,UAyCM7+X,KAAI,CAACtlB,EAAO/Y,KAClB,iBAEE82J,QAAS,IAAMkmQ,EAAcjkZ,GAC7BswJ,UAAS,UAAKvC,GAAc,YAC1B/tJ,EAAMuoB,QAAUu+K,EAAav+K,MAAQwlI,GAAgB,GAAE,KACrD,UAEJ,iBAAKuC,UAAWvC,GAAgB,SACnB,IAAV9mK,GACC,UAAC,KAAK,CACJoa,IAAKrB,EAAMujM,MACXjzC,UAAWvC,GACXnlI,MAAO,CACL3L,WAAYjd,EAAMuoB,MAClB/6B,MAAO,OACPC,OAAQ,OACRovL,aAAc,QACd6lB,cAAc,OAEhB7M,SAAS,KAGX,iBACEvlC,UAAWvC,GACXnlI,MAAO,CACL3L,WAAYjd,EAAMuoB,MAClB/6B,MAAO,OACPC,OAAQ,OACRovL,aAAc,cA3BjB51L,WAoCb,UAAC,MAAM,CAAC2hC,MAAO,CAACy5K,UAAU,QAAStkD,QAAS,IAAImmQ,EAAc,CAAC37X,MAAM,GAAI47X,KAAK,GAAIC,MAAM,IAAK99Z,KAAK,OAAOgjB,KAAK,SAASy0J,MAAM,UAACoE,GAAA,EAAkB,IAAI,SAAC,WACjJ,EAMV6hP,GAAazsM,aAAe,CAAC,EAE7B,YChOM8sM,IAAgBrqB,EAAAA,EAAAA,OAAK,IAAM,gCAQjC,GANkBv0P,IAChB,UAAC,EAAAwkB,SAAQ,CAACnL,SAAU,KAAK,UACvB,UAACulQ,GAAa,IAAK5+Q,qBCCvB,MAAM6+Q,GAAY,QAAC,cAAEC,GAAe,SAClC,iBAAKj0P,UAAW,YAAY,UAC1B,kBAAK1nI,MAAO,CAAEp7B,MAAO,QAASC,OAAQ,QAAS+c,SAAU,YAAa,WACpE,WAAC,MAAM,CACLoe,MAAO,CACLikL,OAAQ,QACRriM,SAAU,WACV6pJ,OAAQ,GAEVtW,QAASwmQ,EAAc,WAEvB,UAAC,GAAiB,IAAG,YAEvB,iBAAKtpY,GAAG,UAAUq1I,UAAS,eAAiB,UAC1C,UAAC,KAAW,UAGZ,EAKRg0P,GAAU/sM,aAAe,CAAC,EAE1B,MC7BMitM,IAA4BxqB,EAAAA,EAAAA,OAAK,IAAM,+BAQ7C,GAN8Bv0P,IAC5B,UAAC,EAAAwkB,SAAQ,CAACnL,SAAU,KAAK,UACvB,UAAC0lQ,GAAyB,IAAK/+Q,qBCLnC,SAA4B,yCAA5B,GAA0F,kDAA1F,GAA0J,2CAA1J,GAAiN,yCAAjN,GAAoQ,uCAApQ,GAAmT,qCAAnT,GAAiW,sCAAjW,GAAkZ,wCAAlZ,GAAkc,qCAAlc,GAA+e,oDCK/e,MAAQ+9F,MAAM,IAAI3B,GAAAA,EA6DlB,GA3D8B,IAAgE,IAA/D,cAAE4iL,EAAa,aAAE39M,EAAY,aAAE49M,EAAY,WAAEC,GAAY,EAGtF,OACE,iBAAKr0P,UAAWvC,GAAiB,UAC/B,kBAAKuC,UAAWvC,GAA0B,WACxC,UAAC,KAAG,CAACuC,UAAW,CAACvC,GAAoBA,IAAkB,UACrD,UAAC,KAAG,CAACy8B,KAAM,GAAG,UACZ,UAAC,GAAK,CAACjmG,MAAO,EAAE,SAAC,4BAGrB,UAAC,MAAS,CAAC37D,MAAO,CAAEp7B,MAAO,OAAQC,OAAQ,SAAU,UACnD,iBAAKywK,MAAM,sDAAqD,UAC9D,iBAAKA,MAAM,2BAA0B,UACnC,UAAC,KAAG,CACF5N,UAAW,CACTvC,GACAA,IAEFs8B,OAAQ,EAAE,SAETs6N,EAAWr/X,KAAI,CAAC9H,EAAOv2B,KACtB,kBAEE82J,QAAS,IAAM0mQ,EAAcjnY,GAC7B8yI,UAAS,UAAKvC,GAAc,YAAIvwI,EAAM2mY,OAASr9M,EAAaq9M,KAAOp2P,GAAgB,GAAE,KAAI,WAEzF,kBAAKuC,UAAWvC,GAAgB,WAC9B,UAAC,KAAK,CACJuC,UAAWvC,GACX1sJ,IAAKmc,EAAM+lL,MACX1N,SAAS,KAEX,UAAC,GAAK,CAACvlC,UAAWvC,GAAcxpE,MAAO,EAAE,SACtC/mE,EAAM2mY,UAIM,IAAhB3mY,EAAM4mY,OACL,mBAAM9zP,UAAWvC,GAAa,UAAC,IAAEvwI,EAAM4mY,SAEvC,KAlBGn9Z,iBA4Bf,ECjCJ63G,GAAQ,CACZ,CACE48G,MAAO,QAET,CACEA,MAAO,SAET,CACEA,MAAO,cAET,CACEA,MAAO,UAET,CACEA,MAAO,QAET,CACEA,MAAO,YAKLkpM,GAAa,CACjB,CACElpM,MAAO,SAET,CACEA,MAAO,WAET,CACEA,MAAO,QAET,CACEA,MAAO,SAET,CACEA,MAAO,QAET,CACEA,MAAO,YAMLmpM,GAAO,KAEX,MAAOnwS,EAAS4zE,IAAc7tC,EAAAA,EAAAA,WAAS,IAGhCqqQ,EAAYC,IAAiBtqQ,EAAAA,EAAAA,WAAS,GAEvCzL,EAAQlwC,GAAMx5E,KAAKinH,IAAI,CAC3BpuH,IAAKouH,EAAKmvE,MACVA,MAAOnvE,EAAKmvE,UAGRspM,EAAaJ,GAAWt/X,KAAKinH,IAAI,CACrCpuH,IAAKouH,EAAKmvE,MACVA,MAAOnvE,EAAKmvE,WAGR,MAAEpsD,GAAU1D,GAAAA,EAAAA,YACX79D,EAASsnG,IAAc56C,EAAAA,EAAAA,UAAS,IAGhC5jC,EAAMouS,IAAWxqQ,EAAAA,EAAAA,UAAS,KAC1ByqQ,EAAYC,IAAiB1qQ,EAAAA,EAAAA,UAAS,OACtC2qQ,EAAYC,IAAiB5qQ,EAAAA,EAAAA,UAAS,OACtC6qQ,EAAYC,IAAiB9qQ,EAAAA,EAAAA,UAAS,OACtC+qQ,EAAYC,IAAiBhrQ,EAAAA,EAAAA,UAAS,OACtCirQ,EAAYC,IAAiBlrQ,EAAAA,EAAAA,UAAS,OACtCmrQ,EAAYC,IAAiBprQ,EAAAA,EAAAA,UAAS,OACtCqrQ,EAASC,IAActrQ,EAAAA,EAAAA,aACvBurQ,EAAUC,IAAexrQ,EAAAA,EAAAA,UAAS,UASnCyrQ,EAAW,KACfD,EAAY,GAAG,EAeXE,EAAU,KACdjoS,OAAOk1Q,SAAS,CAAEx9W,IAAKlf,SAASkrP,eAAe,UAAWwkK,SAAU,UAAW,EAG3El/V,EAAO,KASX,GAHI6mC,GAAW,IACP,OAAN24S,QAAM,IAANA,GAAAA,EAAQR,aAEuB,UAA7BmgB,GAAoBlC,MAAiC,IAAZp2T,EAAgB,CAC3D,MAAMu4T,EAAYC,GAAcC,MAAMC,IAAQC,OAE9C,QAAiBlga,GAAb8/Z,GAA0BA,EAAU5+Z,OAAS,EAC/C,IAAK,IAAIF,EAAI,EAAGA,EAAI8+Z,EAAU5+Z,OAAQF,IAEpC,GADA2F,QAAQ3D,IAAI,YAAa88Z,GACrBA,EAAU5+Z,OAAS,GAAe,GAAV++Z,IAAqC,yCAAtBH,EAAU,GAAG5qM,OAA+E,IAA3B4qM,EAAU,GAAG59Z,MAAM+N,MAC/F,IAA3B6vZ,EAAU,GAAG59Z,MAAM+N,KAGtB,YADAwoF,GAAAA,MAAc,sEAcd,OAANynT,QAAM,IAANA,GAAAA,EAAQR,YACJugB,IAAU,GAEN,OAAN/f,QAAM,IAANA,GAAAA,EAAQR,YACF,OAANQ,QAAM,IAANA,GAAAA,EAAQnlY,OAAOuhQ,mBAAmB6jJ,GAAcp+X,MAAa,OAANm+W,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAO0kQ,UAAU5rL,KAAW,OAANqsT,QAAM,IAANA,OAAM,EAANA,EAAQnlY,SAC7FqlZ,GAAUH,GAAS,GACnBI,GAAaJ,GAAS,IAEtBpxN,EAAWtnG,EAAU,EAEzB,MACEsnG,EAAWtnG,EAAU,IAzDP,GAAXA,QAA6CvnG,GAA7Bsga,EAAqB3C,MACzB,GAAXp2T,QAAqCvnG,GAArBk+Z,EAAajuZ,MAClB,GAAXs3F,QAAsCvnG,GAAtBmga,GAAcxC,OAGlCY,GAAc,GAkGhBmB,IAEAC,GAAS,GAkFJY,EAAWC,IAAgBvsQ,EAAAA,EAAAA,UAAS,IAiCpCwsQ,EAAgBC,IAPd53P,EAAMg+C,kBACIh+C,EAAMs9C,eACTt9C,EAAM03B,eACb,cAAD,OAAgB13B,EAAMk0B,cAIc/oC,EAAAA,EAAAA,WAAS,KAE9CiqQ,EAAcyC,IAAmB1sQ,EAAAA,EAAAA,UAAS,CAAC,IAC3CgqQ,EAAe2C,IAAoB3sQ,EAAAA,EAAAA,UAAS,CAAC,IAE7CqsQ,EAAsBO,IAA2B5sQ,EAAAA,EAAAA,UAAS,CAAC,IAE3D6sQ,EAAoBC,IAAyB9sQ,EAAAA,EAAAA,UAAS,CAC3D8oD,MAAO,GACP4gN,KAAM,MAEDD,EAAesD,IAAoB/sQ,EAAAA,EAAAA,UAAS,CACjD8oD,MAAO,GACP4gN,KAAM,GACNC,MAAO,KAGFqD,EAAiBC,IAAsBjtQ,EAAAA,EAAAA,aAEvCktQ,EAAsBC,IAA2BntQ,EAAAA,EAAAA,WAAS,IAE3D,gBAAE+rP,EAAe,OAAEE,EAAM,QAAED,IAAY2M,EAAAA,GAAAA,MACtCyU,EAAeC,IAAoBrtQ,EAAAA,EAAAA,UAAS,CACjD8oD,MAAO,GACP4gN,KAAM,MAGDwC,GAAeoB,KAAoBttQ,EAAAA,EAAAA,UAAS,CAAC,IAE7CwpQ,GAAe+D,KAAoBvtQ,EAAAA,EAAAA,UAAS,CACjDlyH,MAAO,GACP47X,KAAM,MAGD5nY,GAAQ0rY,KAAaxtQ,EAAAA,EAAAA,UAAS,KAC9B8rQ,GAAe2B,KAAoBztQ,EAAAA,EAAAA,UAAS,KAE5C0tQ,GAAYC,KAAiB3tQ,EAAAA,EAAAA,aA4C7B4rQ,GAAqBgC,KAA0B5tQ,EAAAA,EAAAA,UAAS,CAC7D8oD,MAAO,sBACP4gN,KAAM,WAUDmE,GAAsBC,KAA2B9tQ,EAAAA,EAAAA,UACtD,CACE8oD,MAAO,sBACP4gN,KAAM,WAaJqE,GAAQl/Y,IACRA,IACF69Y,EAAgB79Y,GAChBy7Y,GAAc,GAEhB,GAoBK0D,GAAuBC,KAA4BjuQ,EAAAA,EAAAA,YAEpDkuQ,GAAuBC,IACvBA,GACFrB,EAAsBqB,EAExB,EAUIC,GAAkBC,IAClBA,IACFf,GAAiBe,GAEjB/D,GAAc,GAEhB,EAGIgE,GAAkBC,IAClBA,GACFxB,EAAiBwB,EAEnB,GAgBKC,GAASC,KAAczuQ,EAAAA,EAAAA,UAAS,CACrC0uQ,WAAY,CAAE1yZ,KAAM,SAAU05G,SAAU,UAAWi5S,MAAO,GAC1D91M,MAAO,KAGH+1M,GAAkBnnZ,IACtBgnZ,GAAWhnZ,EAAK,GAGXonZ,GAAUC,KAAe9uQ,EAAAA,EAAAA,WAAS,IAEzC7W,EAAAA,EAAAA,YAAU,KACR,GAAgB,IAAZ71C,EAAe,CACjB,IAAIy7T,EAAmB,OAAN9iB,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACxCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,MAGV03Z,EAAcqE,GACdnE,EAAcmE,GACdjE,EAAciE,GACd/D,EAAc+D,GACd7D,EAAc6D,GACd3D,EAAc2D,EAChB,CAzTc,GAAV/C,IAEFtB,EAAoB,OAANze,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,OAGE,GAAVg5Z,IAEFpB,EAAoB,OAAN3e,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,OAGE,GAAVg5Z,IAEFlB,EAAoB,OAAN7e,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,OAGE,GAAVg5Z,IAEFhB,EAAoB,OAAN/e,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,OAGE,GAAVg5Z,IAEFd,EAAoB,OAANjf,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,OAGE,GAAVg5Z,IAEFZ,EAAoB,OAANnf,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAOM,UAAU,CACrCgC,OAAQ,OACRrW,MAAO,IACPC,OAAQ,MA8QS,GACpB,CAACk5Z,MAyEJ/iR,EAAAA,EAAAA,YAAU,KACR0kD,GAAW,GAEXhzE,MAAM+jD,qDACH9jD,MAAMuI,GAAQA,EAAIn0B,SAClB4rB,MACEl6F,IACC,MAAMouY,EAAY,GAClB,IAAK,IAAIjia,EAAI,EAAGA,EAAI6zB,EAAO3zB,OAAQF,IAAK,CACtC,MAAMkia,EAAYruY,EAAO7zB,GAAG2Z,MAAMooD,QAAQ,IAAK,KAE/CkgW,EAAU5ia,KAAK,CAEbo0B,GAAII,EAAO7zB,GAAG2oE,IACdozI,MAAM,UAAD,OAAYmmN,EAAS,QAC1BvF,KAAM9oY,EAAO7zB,GAAGk0N,MAChB0oM,MAAO,IAETsE,GAAyBe,EAE3B,CACAnhO,GAAW,EAAM,IAKlB3tK,OAGF,GAOF,KA0BHipH,EAAAA,EAAAA,YAAU,KAlHa,MAAO,IAAD,EAC3B,IAAI9tB,QACsBtvH,IAAvBk+Z,EAAa0E,MACT1E,EAAa0E,MAAQ,EACtB1E,EAAa0E,aACQ5ia,IAAxBi+Z,EAAcL,MACVK,EAAcL,MAAQ,EACvBK,EAAcL,aACO59Z,IAAxBmga,GAAcvC,MACVuC,GAAcvC,MAAQ,EACvBuC,GAAcvC,aACO59Z,IAAxB09Z,EAAcE,MACVF,EAAcE,MAAQ,EACvBF,EAAcE,OAClB2C,GACkB,QADT,EACTkC,GAAQE,kBAAU,aAAlB,EAAoBC,OAYtBhB,GAActyS,GAEd4xS,EAAmB,CACjBX,YACArC,eACAD,gBACAqC,uBACAH,iBACAkB,gBACA3D,gBACAoD,qBACAzwS,OACAoyS,WACA5C,uBACAiC,wBACA/B,mBAGFp5Z,QAAQ3D,IAAI,mBAAoBi+Z,GAEhCt6Z,QAAQ3D,IAAI,kBAAmBi+Z,EAAgB,EAoE/CkC,QAEqBnja,GAAjByia,GAAQ31M,OAAuC,IAAjB21M,GAAQ31M,MACxCs0M,GAAwB,GAExBA,GAAwB,EAC1B,GAGC,CACDb,EACArC,EACAD,EACAqC,EACAH,GACAkB,EACA3D,EACAoD,EACAzwS,EACAoyS,GACA5C,GACAiC,MAIF1kR,EAAAA,EAAAA,YAAU,KACR0kD,GAAW,GACXhzE,MAAM+jD,gCAAyB,uBAAmBytP,EAAqB7rY,KACpEs6F,MAAMuI,GAAQA,EAAIn0B,SAClB4rB,MACEl6F,IACC6sY,GAAiB7sY,GACjBitK,GAAW,EAAM,IAKlB3tK,OAGF,GAEF,CAACmsY,IAIJ,MAAO8C,GAAYC,KAAiBpvQ,EAAAA,EAAAA,UAClC,CACEkiN,GAAI,EACJn5H,MAAO,aACP2gL,KAAM,GACN57X,MAAO,GACPy4J,SAAU,GACV+gC,WAAY,GACZqiM,MAAO,IAET,CACEznD,GAAI,EACJn5H,MAAO,cACP2gL,KAAM,GACN57X,MAAO,GACPy4J,SAAU,GACV+gC,WAAY,GACZqiM,MAAO,IAET,CACEznD,GAAI,EACJn5H,MAAO,aACP2gL,KAAM,GACN57X,MAAO,GACPy4J,SAAU,GACV+gC,WAAY,GACZqiM,MAAO,MASJqC,GAAQG,KAAansQ,EAAAA,EAAAA,UAAS,IAC9BqvQ,GAAWjD,KAAgBpsQ,EAAAA,EAAAA,UAAS,IAEpCsvQ,GAAUC,KAAevvQ,EAAAA,EAAAA,UAAS,GAEnCwvQ,GAAgBnsT,IAEpBksT,GAAYvD,IACZG,GAAU9oT,EAAM,EAAE,EAiBpB,MAAMymT,GAAgB,KACpBj8N,GAAW,IAdbv0G,eAAwBlxE,EAAKX,GAS3B,aAPuBozG,MAAMzyG,EAAK,CAChC+9E,OAAQ,OACRq0B,QAAS,CACP,eAAgB,oBAElBQ,KAAMtwG,KAAKE,UAAUnD,MAEPynF,MAClB,EAOEugU,CAAS7wP,oDADI8wP,MACsD50S,MAAMrzG,IAEvE6jZ,EAAW7jZ,GACXglZ,GAAkB,GAClB5+N,GAAW,EAAM,GACjB,EAIE6hO,GAAc,KAClB,MAAMC,EAAa7D,GAAcC,MAAMlhY,KAAInE,IACzC,MAAMkpY,EAAclpY,EAAKulY,OAAOphY,KAAIisH,IAClC,GAAkB,qBAAdA,EAAMjrJ,MAA6C,sBAAdirJ,EAAMjrJ,KAE7C,MAAmB,iBAAfirJ,EAAMjrJ,MAA0C,sBAAfirJ,EAAMjrJ,KAClC,CACL0wH,MAAOu6B,EAAMmqE,MACb4uM,MAAOjxP,sCAA4B9nB,EAAM7oJ,MAAM+N,MAG1C,CACLugH,MAAOu6B,EAAMmqE,MACb4uM,MAAO/4Q,EAAM7oJ,MAAM+N,KAGzB,IAIF,MAAO,CACL0qB,KAAMA,EAAKA,KACXulY,OAAQ2D,EACT,IA+BH,MA7Ba,CACX3uM,MAAO6qM,GAAc7qM,MACrB0tM,MAAOjB,GACP7ha,KAAM+/Z,GAAoBlC,KAC1Bv7X,MAAO0/X,GAAqBnE,KAC5BoG,cAAe,IACfjhZ,KAAM,CACJ7S,KAAMiuZ,EAAajuZ,KACnB2yZ,MAAO1E,EAAa0E,MACpB9/Y,KAAMo7Y,EAAap7Y,MAErBif,MAAO,CACL9xB,KAAMkwZ,GAAcxC,KACpBrzV,KAAM61V,GAAcp+X,MACpB6gY,MAAOzC,GAAcvC,OAEvBoC,MAAO4D,EACPznZ,OAAQ,CACN+iZ,EACAR,EACAE,EACAE,EACAE,EACAI,GAMO,GAON4E,GAAYntJ,KAAiB5iH,EAAAA,EAAAA,UAAS,IAc7C,OAZA7W,EAAAA,EAAAA,YAAU,KAINy5H,GAHG4pJ,EAGW,GAFA,iBAGhB,GACC,CAACA,KAOF,iBAAK32P,UAAWvC,GAAAA,KAAY,UAE1B,UAAC,KAAK,CACJ3/I,UAAU,aACVkiJ,UAAWvC,GAAAA,aACXnlI,MAAO,CAAEp7B,MAAO,QAAS,UAEzB,WAAC,KAAG,WACDg9Z,KACC,WAAC,KAAG,CAAChgO,KAAM,EAAE,UAAC,QAEZ,mBAAM,QAEN,mBAAM,QAEN,uBAIJ,UAAC,KAAG,CAACvR,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAInpB,UAAS,UAAKk6P,IAAa,UACtE,UAAC,GAAI,CAAC5P,SAAUlmS,EAASgP,MAAO,EAAGp6G,KAAK,QAAO,UAC7C,iBAAKgnJ,UAAWvC,GAAAA,OAAc,UAC5B,kBAAKuC,UAAWvC,GAAAA,aAAoB,UACJ,SAA7Bs4P,GAAoBlC,MACnB,UAAC,MAAS,CAACv7X,MAAO,CAACp7B,MAAM,OAAQC,OAAO,SAAS,UAC/C,iBAAKywK,MAAM,sDAAqD,UAC9D,iBAAKA,MAAM,2BAA0B,UACnC,UAAC,GAAK,CAAC5N,UAAWvC,GAAAA,cAAsBhgE,QAASA,EAASihD,MAAOA,EAAO6tQ,eAAe,WAAWvzY,KAAK,iBAK3G,UAAC,MAAS,CAACsf,MAAO,CAAEp7B,MAAO,OAAQC,OAAQ,SAAU,UACrD,iBAAKywK,MAAM,sDAAqD,UAC9D,iBAAKA,MAAM,2BAA0B,UACnC,UAAC,GAAK,CAAC5N,UAAWvC,GAAAA,cAAsBhgE,QAASA,EAASihD,MAAOg2Q,EAAYnI,eAAe,WAAWvzY,KAAK,iBAMpH,kBAAKgnJ,UAAWvC,GAAAA,SAAgB,UACjB,IAAZhgE,IACC,UAAC,GAAqB,CACpB08T,SAlhBA,CACpB,CACElnN,MAAO,qBACP4gN,KAAM,YAER,CACE5gN,MAAO,sBACP4gN,KAAM,UA4gBYoE,wBAneSmC,IACzBA,IACFnC,GAAwBmC,GACxB3F,GAAc,GACdkB,EAAY,UAEd,EA8doBn/M,aAAcwhN,GACdh4P,UAAWvC,GAAAA,YAIF,IAAZhgE,IACEs4T,IAC+B,UAAX,OAAnBA,SAAmB,IAAnBA,QAAmB,EAAnBA,GAAqBlC,OACrB,UAAC,GAAU,CACTO,aAAc8D,GACd1hN,aAAc49M,EACdp0P,UAAWvC,GAAAA,aAGb,UAAC,GACC,CACA02P,cA5dFkG,IAChBA,IACFtD,EAAwBsD,GACxB5F,GAAc,GAEhB,EAwdsBj+M,aAAcggN,EACdpC,aAAc8D,GACd7D,WAAY8D,GACZn4P,UAAWvC,GAAAA,aAGJ,IAAZhgE,IACEs4T,IAC+B,UAAX,OAAnBA,SAAmB,IAAnBA,QAAmB,EAAnBA,GAAqBlC,OACrB,UAAC,GAAW,CACVM,cA9eTjnY,IACTA,GACF4pY,EAAiB5pY,EAEnB,EA2esBspL,aAAc29M,EACdC,aAAc8D,GACd7D,WAviBL,CACjB,CACEphN,MAAO,qBACP4gN,KAAM,SACNC,MAAO,GAET,CACE7gN,MAAO,qBACP4gN,KAAM,SACNC,MAAO,GAET,CACE7gN,MAAO,uBACP4gN,KAAM,WACNC,MAAO,IA0hBa9zP,UAAWvC,GAAAA,aAGb,UAAC,GAAU,CACT22P,aAAc8D,GACd1hN,aAAc49M,EACdp0P,UAAWvC,GAAAA,aAIJ,IAAZhgE,IAC+B,SAA7Bs4T,GAAoBlC,MACnB,kCAC+B,KAA5BmD,EAAmBnD,MAClB,UAAC,GAAU,CACTmD,mBAAoBqB,GACpB7hN,aAAcwgN,EACdh3P,UAAWvC,GAAAA,YAGb,GAGDu5P,EAAmBnD,MACU,WAA5BmD,EAAmBnD,MACnB,UAAC,GAAK,CACJ0D,cAlfJ+C,IAClBA,GACF9C,EAAiB8C,EAEnB,EA+e0BtD,mBAAoBqB,GACpB7hN,aAAc+gN,EACdv3P,UAAWvC,GAAAA,YAGb,GAGDu5P,EAAmBnD,MACU,YAA5BmD,EAAmBnD,MACnB,UAAC,GAAO,CACN0G,gBAAiBhC,GACjBvB,mBAAoBqB,GACpB7hN,aAAc6/M,GACdr2P,UAAWvC,GAAAA,YAGb,OAIJ,iCAEI,UAAC,GAAO,CACN88P,gBAAiBhC,GACjBvB,mBAAoBqB,GACpB7hN,aAAc6/M,GACdr2P,UAAWvC,GAAAA,eAMR,IAAZhgE,IAC+B,SAA7Bs4T,GAAoBlC,MACnB,kCAC0B,KAAvBD,EAAcC,MACb,UAAC,GAAK,CACJD,cAAe6E,GACfjiN,aAAco9M,EACd5zP,UAAWvC,GAAAA,UACX24O,OAAQA,IAGV,GAEsB,KAAvBwd,EAAcC,MACb,UAAC,GAAY,CACXF,cA5gBJ17X,IAElBA,EAAMg7K,MAERykN,GAAiB,CAAEz/X,MAAO,KAI1By/X,GAAiBz/X,EAEnB,EAmgB0Bu+K,aAAcm9M,GACdC,cAAe6E,GACfz4P,UAAWvC,GAAAA,YAGb,OAIJ,UAAC,GAAI,CACHg3P,cAAeA,EAEfz0P,UAAWvC,GAAAA,UACXnF,SA/tBP,CAACxnB,EAAK96I,KAEJ,KAAb86I,EAAI+iR,MACNc,EAAQ,IAAKpuS,EAAM,CAACvwH,GAAO86I,GAC7B,EA4tBsBvqB,KAAMA,EACNi0S,gBACmBtka,GAAjB+/Z,GACIA,GAAcC,MAAMC,IACpB,KAEN/f,OAAQA,EACR+f,OAAQA,GACRwD,aAAcA,GACdc,kBA5YE,CAAClnY,EAAU58B,KACnC,MAAM+ja,EAAYzE,GAClByE,EAAUxE,MAAMC,IAAQC,OAAOz/Z,GAAOyB,MAAQm7B,EAE5CqkY,GAAiB8C,GAEnB,IAAIC,EAAc1E,GAAcC,MAAMC,IAAQC,OAAO57Q,MAAKulB,KAEnC,IAAjBA,EAAI0iD,UAAsC,SAAjB1iD,EAAI0iD,YACJ,OAAnB1iD,EAAI3nK,MAAM+N,MAAoC,KAAnB45J,EAAI3nK,MAAM+N,QAMjDsuZ,EAAckG,EAAY,EA8XJ5E,oBAAqBA,GACrByD,UAAWA,GACXjD,aAAcA,GACdN,cAAeA,GACfpB,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfX,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,KAGL,IAAZ73T,IACC,iCAkBI,UAAC,GAAO,CACN05T,gBAAiBA,EACjB4B,eAAgBA,GAChB/4P,UAAWvC,GAAAA,cAKN,IAAZhgE,IACC,UAAC,GAAO,CACN05T,gBAAiBA,EACjB4B,eAAgBA,GAChB/4P,UAAWvC,GAAAA,gBAIjB,kBAAKuC,UAAWvC,GAAAA,WAAkB,UAC/BhgE,GAAW,IACV,WAAC,MAAM,CACLnlE,MAAO,CACLikL,OAAQ,SAEV9uD,QAAS,KA/zB7BooQ,IAEAD,IAEM,OAANxf,QAAM,IAANA,GAAAA,EAAQR,YACyB,UAA7BmgB,GAAoBlC,MAAgC,IAAZp2T,GACtC04T,IAAU,GAEN,OAAN/f,QAAM,IAANA,GAAAA,EAAQnlY,OAAOuhQ,mBAAmB6jJ,GAAcp+X,MAAa,OAANm+W,QAAM,IAANA,OAAM,EAANA,EAAQnlY,OAAO0kQ,UAAU5rL,KAAW,OAANqsT,QAAM,IAANA,OAAM,EAANA,EAAQnlY,SAC7FqlZ,GAAUH,GAAS,GACnBI,GAAaJ,GAAS,IAKxBpxN,EAAWtnG,EAAU,QAGvBg3T,GAAc,IA6yB4B,WAEtB,UAAC,GAAiB,IAAG,eAIK,SAA7BsB,GAAoBlC,MACnB,kCACGp2T,EAAU+Q,GAAMp3G,OAAS,IACxB,WAAC,MAAM,CAACpB,KAAK,UAAUy3J,QAAS,IAAM72F,IAAQy3H,UAAQ,YAAC,SAChD,UAAC,GAAkB,OAI3B5wF,IAAY+Q,GAAMp3G,OAAS,IAC1B,UAAC,MAAM,CAACpB,KAAK,UAAUy3J,QAASwmQ,GAAc,SAAC,eAMnD,kCACGx2T,EAAU62T,GAAWl9Z,OAAS,IACjB,IAAZqmG,GACiB,IAAf+2T,GAGE,WAAC,MAAM,CAACx+Z,KAAK,UAAUy3J,QAAS,IAAM72F,IAAQy3H,UAAQ,YAAC,SAChD,UAAC,GAAkB,QAI1B,WAAC,MAAM,CAACr4L,KAAK,UAAUy3J,QAAS,KAAQ72F,GAAM,EAAI,UAAC,SAC5C,UAAC,GAAkB,QAIb,IAAf49V,GACE,WAAC,MAAM,CAACx+Z,KAAK,UAAUy3J,QAAS,KAAQ72F,GAAM,EAAKy3H,UAAQ,YAAC,SACrD,UAAC,GAAkB,QAGxB,WAAC,MAAM,CAACr4L,KAAK,UAAUy3J,QAAS,KAAQ72F,GAAM,EAAI,UAAC,SAC9C,UAAC,GAAkB,QAI/B6mC,IAAY62T,GAAWl9Z,OAAS,GAC/B,UAAC,MAAM,CAACi3L,SAAUgpO,EAAsBrha,KAAK,UAAUy3J,QAASwmQ,GAAc,SAAC,WAEnE,mBAS5B,UAAC,KAAG,CAACtrO,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAIE,GAAI,GAAG,UAC1C,kBAAKnpB,UAAWvC,GAAAA,QAAe,eACEvnK,IAA9Bsga,EAAqB3C,MAAsBp2T,GAAW,GAAI,iBAAIuiE,UAAWvC,GAAAA,SAAe,eAAoCvnK,IAA9Bsga,EAAqB3C,MAAsBp2T,GAAW,EAAI,UAAY,IAAK,eAChJvnG,IAAvBi+Z,EAAcN,MAAsBp2T,GAAW,EAC5C02T,EAAcN,KAAO,UACrB,QAE2B39Z,IAA9Bsga,EAAqB3C,MAAsBp2T,GAAW,EACnD+4T,EAAqB3C,KAAO,IAC5B,QACmB39Z,IAAtBk+Z,EAAap7Y,MAAsBykF,GAAW,GAAI,mBAAS,QACrCvnG,IAAtBk+Z,EAAap7Y,MAAsBykF,GAAW,EAC3C,gBAAkB22T,EAAap7Y,KAAO,IACtC,MACE,IAGR,UAAC,GAAS,CACR+8Y,oBAAqBA,GACrB5B,cAAeA,EACfkC,cAAeA,GACfW,mBAAoBA,EACpBO,cAAeA,EACf3D,cAAeA,EACfuD,gBAAiBA,EACjB/gB,OAAQA,EACRD,QAASA,EACTD,gBAAiBA,EACjByjB,aAAcA,GACdxD,OAAQA,GAAS,EACjBsD,SAAUA,GAAW,EACrBS,WAAYA,GACZrF,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfE,cAAeA,EACfX,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZE,WAAYA,EACZ0D,SAplCUryY,IACtB9pB,QAAQ3D,IAAI,SAAWytB,GACvBgvY,EAAYhvY,EAAO,EAmlCP+uY,SAAUA,EACVj4T,QAASA,KAGX,kBAAKuiE,UAAWvC,GAAAA,WAAkB,UAgB/By8P,KACC,mCACE,WAAC,MAAM,CACL5hY,MAAO,CACLikL,OAAQ,SAEV9uD,QAAS,KAAQs3C,EAAW,GAAIgoE,GAAc,GAAG,EAAI,WAErD,UAAC,GAAiB,IAAG,YAGvB,UAAC,MAAM,CACL/2Q,KAAK,UACLsiC,MAAO,CACLikL,OAAQ,SAEV9uD,QA3YI,KACtB7/B,OAAO1sE,SAASo4I,KAAI,gEAA4Du+N,GAAU,oBAAY9uP,gCAAyB,oCAA4BysP,EAAQ5gR,QAAQuxB,WAAU,yBAAiB4C,gCAAyB,8BAAsBysP,EAAQ5gR,QAAQuxB,WAAY,EA0YtO,SAC1B,eAOJ1oE,GAAW,GAAKo6T,GAAa,GAC5B,kBAAM73P,UAAWvC,GAAAA,SAAe,2BAC9BnlI,MAAO,CACLikL,OAAQ,SACR,SAEDs7M,IAAc,IAAMA,KACb,iBAOjB,EAMXtD,GAAKttM,aAAe,CAAC,EAErB,YC9vCA,GAA2B,2BCGrB2zM,GAAW,KACf,iBAAK56P,UAAWvC,GAAgB,SAAC,uBAOnCm9P,GAAS3zM,aAAe,CAAC,EAEzB,YCKA,GAbY,IACKq4L,EAAU,CACvB,CAAEjpV,KAAM,IAAK/pC,SAAS,UAAC,GAAI,KAC3B,CAAE+pC,KAAM,WAAY/pC,SAAS,UAAC,GAAQ,KACtC,CAAE+pC,KAAM,WAAY/pC,SAAS,UAAC,GAAQ,OCE1C,GAZwBuuY,IAClBA,GAAeA,aAAuBx8M,UACxC,6BAAqBp5F,MAAK,IAAkD,IAAjD,OAAE61S,EAAM,OAAEC,EAAM,OAAEC,EAAM,OAAEC,EAAM,QAAEC,GAAS,EACpEJ,EAAOD,GACPE,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAQL,EAAY,GAExB,ECRF,GAA8P,kCCsB9P,GAvB4B77P,IAC1B,MAAM,aACJ2sB,EAAY,iBACZmI,EAAgB,YAChBqnO,EAAW,UACXhpO,GACEnzB,EACJ,MAAO,CACL,CAAC,GAAD,OAAI2sB,EAAY,iBAAiB,CAC/Bh/J,WAAYmnK,EACZ,CAAC,GAAD,OAAInI,EAAY,mBAAmB,CACjCj8K,MAAOyiL,EACPxlK,WAAYmnK,GAEd,CAAC,GAAD,OAAInI,EAAY,8BAA8B,CAC5Cj8K,MAAOyiL,EACPxlK,WAAYmnK,EACZjC,OAAQ,aAAF,OAAespO,GACrB1+M,kBAAmB,IAGxB,ECnBG2+M,GAAiBp8P,IACrB,MAAM,OACJm9C,EAAM,aAENxwB,EAAY,UAEZwG,EAAS,oBACTmC,EAAmB,cACnB+mO,EAAa,YACbF,EAAW,eACXG,EAAc,mBACdC,EAAkB,0BAClBC,EAAyB,kBACzBC,EAAiB,oBACjBC,EAAmB,oBACnBC,EAAmB,sBACnBC,EAAqB,kBACrB5pO,EAAiB,mBACjB6D,EAAkB,SAClBnF,EAAQ,aACRnE,GACEvtB,EACJ,MAAO,CACL,CAAC2sB,GAAe93K,OAAOqD,OAAOrD,OAAOqD,OAAO,CAC1C8zE,QAAS,OACTw3E,KAAM,OACNgpB,cAAe,SAEfkY,UAAW,EACX/2K,WAAYwuY,EACZ,OAAQ,CACNtvO,UAAW,cAEb,CAAC,IAAD,OAAKF,EAAY,eAAe,CAC9BH,cAAe,MACf,CAAC,KAAD,OAAMG,EAAY,eAAOA,EAAY,aAAa,CAEhDzuL,MAAO,IAGX,CAAC,GAAD,OAAIyuL,EAAY,qBAAaA,EAAY,YAAY,CACnDnpB,KAAM,YAER,CAAC,GAAD,OAAImpB,EAAY,YAAY,CAC1BxuL,OAAQo+Z,EACR5nL,cAAe6nL,EACf9rZ,MAAO+rZ,EACP93P,WAAY,GAAF,OAAK43P,EAAkB,MACjC5uY,WAAY0uY,EAGZ,CAAC,GAAD,OAAIl/M,EAAM,UAAU,CAClBx4C,WAAY,YAGhB,CAAC,GAAD,OAAIgoB,EAAY,YAAY,CAC1BgK,QAAS+lO,EACThsZ,MAAOyiL,EACPzB,WACA/jK,WAAYwuY,GAEd,CAAC,GAAD,OAAIxvO,EAAY,aAAa,CAC3BnpB,KAAM,OAENkhC,UAAW,GAEb,CAAC,GAAD,OAAI/X,EAAY,WAAW,CACzBzxK,SAAU,WAEV04K,SAAU,EACVjmK,WAAY0uY,EACZtvO,WAAY,OAAF,OAASiG,GACnB,aAAc,CACZ70L,OAAQ,OAIR40M,WAAY,GACZnX,WAAY,GACZ,CAAC,GAAD,OAAIuhB,EAAM,gBAAQA,EAAM,2BAA2B,CACjDj/M,MAAO,SAGX,gBAAiB,CACf29L,cAAe8gO,GAEjB,UAAW,CACT1/Z,MAAO,GAET,YAAa,CACXie,SAAU,QACVqL,OAAQ,EACRw+I,OAAQ,EACR5mK,OAAQw+Z,EACRjsZ,MAAO4kL,EACP3wB,WAAY,GAAF,OAAKg4P,EAAmB,MAClChqO,UAAW,SACXhlK,WAAY2uY,EACZvpO,OAAQ,UACRhG,WAAY,OAAF,OAASiG,IAErB,eAAgB,CACd,MAAO,CACLnmC,SAAU,UAEZ,YAAa,CACX3xI,SAAU,WACVoL,IAAKi2Y,EACLz3N,gBAAiB83N,EACjB73P,OAAQ,EACR7mK,MAAO0+Z,EACPz+Z,OAAQy+Z,EACRlsZ,MAAO4kL,EACP5D,SAAU1xB,EAAMs/D,WAChBtzI,QAAS,OACTu4G,WAAY,SACZD,eAAgB,SAChB32K,WAAY0uY,EACZrqO,uBAAwB,EACxBH,qBAAsBtE,EACtBuE,mBAAoBvE,EACpB0E,qBAAsB,EACtBc,OAAQ,UACRhG,WAAY,cAAF,OAAgB8J,EAAkB,SAC5C,WAAY,CACV37K,SAAU,WACVw2L,MAAO,EACP/jL,WAAY,cACZo/J,WAAY,OAAF,OAAS8J,GACnBtD,QAAS,MAEX,iBAAkB,CAEhB5lK,WAAY,4BAEd,UAAW,CACT2lK,kBAAmBspO,EACnB5qO,uBAAwBzE,EACxBsE,qBAAsB,EACtBC,mBAAoB,EACpBG,qBAAsB1E,OAK7BsvO,GAAoB78P,IAAS,CAE9B,QAAS,CACPlhJ,UAAW,SAGhB,EAGH,IAAemuK,EAAAA,GAAAA,GAAsB,UAAUjtB,IAC7C,MAAM,UACJmzB,EAAS,gBACTgE,EAAe,cACftD,EAAa,gBACb2D,EAAe,UACfqa,GACE7xC,EACEw8P,EAA8C,KAAlBhlO,EAC5BslO,GAAc5lO,EAAAA,GAAAA,IAAWl3B,EAAO,CAEpCu8P,mBAAoC,EAAhB1oO,EACpB2oO,4BACAC,kBAAmBtpO,EACnBupO,oBAAqB,GAAF,OAAKvlO,EAAe,cAAMqlO,EAAyB,MACtEG,oBAAqBnlO,EAA8B,EAAZqa,EACvC+qN,sBAAuBplO,IAEzB,MAAO,CAAC4kO,GAAeU,GAAa,IACnC98P,IACD,MAAM,cACJ61D,GACE71D,EACJ,MAAO,CACLq8P,cAAe,UACfF,YAAatmM,EACbymM,eAAgB,UACjB,ICtLH,IAAIxsO,GAAgC,SAAUxzL,EAAGmD,GAC/C,IAAI5F,EAAI,CAAC,EACT,IAAK,IAAI8sB,KAAKrqB,EAAOuY,OAAO7W,UAAUi3I,eAAe58I,KAAKiE,EAAGqqB,IAAMlnB,EAAEnI,QAAQqvB,GAAK,IAAG9sB,EAAE8sB,GAAKrqB,EAAEqqB,IAC9F,GAAS,MAALrqB,GAAqD,oBAAjCuY,OAAOk7K,sBAA2C,KAAI73L,EAAI,EAAb,IAAgByuB,EAAI9R,OAAOk7K,sBAAsBzzL,GAAIpE,EAAIyuB,EAAEvuB,OAAQF,IAClIuH,EAAEnI,QAAQqvB,EAAEzuB,IAAM,GAAK2c,OAAO7W,UAAUgyL,qBAAqB33L,KAAKiE,EAAGqqB,EAAEzuB,MAAK2B,EAAE8sB,EAAEzuB,IAAMoE,EAAEqqB,EAAEzuB,IADuB,CAGvH,OAAO2B,CACT,EAKO,MAAMkja,GAA6BlnR,EAAAA,cAAoB,CAC5DmnR,UAAW,CACTC,SAAU,IAAM,KAChBC,YAAa,IAAM,QAGvB,SAAShnZ,GAAUmlJ,GACjB,IAAI,UACF+gC,EAAS,QACTzM,EAAO,YACPzf,GACE7U,EACJ,OAAO8hQ,GACwBtnR,EAAAA,YAAiB,CAACM,EAAOJ,KACpD,MAAM,aACJu5C,GACEz5C,EAAAA,WAAiB05C,GAAAA,KAEnBxf,UAAWmgB,GACT/5C,EACE45B,EAAYuf,EAAa8M,EAAWlM,GAC1C,OAAoBr6C,EAAAA,cAAoBsnR,EAAgBtoZ,OAAOqD,OAAO,CACpE69H,IAAKA,EACLg6B,UAAWA,EACX4f,QAASA,GACRx5C,GAAO,GAOhB,CACA,MAAMinR,GAAqBvnR,EAAAA,YAAiB,CAACM,EAAOJ,KAClD,MAAM,UACFg6B,EAAS,UACT/O,EAAS,SACTzlJ,EAAQ,QACRo0K,GACEx5C,EACJg6C,EAASL,GAAO35C,EAAO,CAAC,YAAa,YAAa,WAAY,YAC1D66B,EAAcC,KAAWlB,EAAW/O,GAC1C,OAAoBnrB,EAAAA,cAAoB85C,EAAS96K,OAAOqD,OAAOrD,OAAOqD,OAAO,CAC3E8oJ,UAAWgQ,GACVmf,GAAS,CACVp6C,QACEx6H,EAAS,IAET8hZ,GAA2BxnR,EAAAA,YAAiB,CAACM,EAAOJ,KACxD,MAAM,UACJj3H,GACE+2H,EAAAA,WAAiB05C,GAAAA,KACd+tO,EAAQC,GAAa1nR,EAAAA,SAAe,KACrC,UACFk6B,EAAS,UACT/O,EAAS,cACT+P,EAAa,SACbx1J,EAAQ,SACRiiZ,EACA7tO,QAAS8tO,GACPtnR,EACJg6C,EAASL,GAAO35C,EAAO,CAAC,YAAa,YAAa,gBAAiB,WAAY,WAAY,aACtFuiD,EAAS71B,GAAU2sB,GAASzf,GAC7BiB,EAAcC,KAAWlB,EAAW,CACxC,CAAC,GAAD,OAAIA,EAAS,eAAmC,mBAAbytP,EAAyBA,EAAWF,EAAOlla,OAAS,EACvF,CAAC,GAAD,OAAI23K,EAAS,SAAuB,QAAdjxJ,GACrBkiJ,EAAW+P,EAAelO,GACvB66P,EAAe7nR,EAAAA,SAAc,KAAM,CACvCmnR,UAAW,CACTC,SAAUtxY,IACR4xY,GAAUvyT,GAAQ,GAAG/+E,QAAOuzI,EAAAA,GAAAA,GAAmBx0D,GAAO,CAACr/E,KAAK,EAE9DuxY,YAAavxY,IACX4xY,GAAUvyT,GAAQA,EAAK7tC,QAAO6yI,GAAaA,IAAcrkL,KAAI,MAG/D,IACJ,OAAO+sK,EAAsB7iD,EAAAA,cAAoBknR,GAAc9yQ,SAAU,CACvE7wJ,MAAOska,GACO7nR,EAAAA,cAAoB4nR,EAAK5oZ,OAAOqD,OAAO,CACrD69H,IAAKA,EACLirB,UAAWgQ,GACVmf,GAAS50K,IAAW,IAEnBoiZ,GAASznZ,GAAU,CACvBkmL,UAAW,SACXzM,QAAS,UACTzf,YAAa,UAHAh6J,CAIZmnZ,IACGO,GAAS1nZ,GAAU,CACvBkmL,UAAW,gBACXzM,QAAS,SACTzf,YAAa,UAHAh6J,CAIZknZ,IACGS,GAAS3nZ,GAAU,CACvBkmL,UAAW,gBACXzM,QAAS,SACTzf,YAAa,UAHAh6J,CAIZknZ,IACGhjG,GAAUlkT,GAAU,CACxBkmL,UAAW,iBACXzM,QAAS,OACTzf,YAAa,WAHCh6J,CAIbknZ,IAEH,MCpHA,SADmB,CAAE,KAAQ,CAAE,IAAO,MAAO,MAAS,CAAE,QAAW,gBAAiB,UAAa,SAAW,SAAY,CAAC,CAAE,IAAO,OAAQ,MAAS,CAAE,EAAK,wYAA4Y,KAAQ,OAAQ,MAAS,YCK/jB,IAAIU,GAAe,SAAsB3nR,EAAOJ,GAC9C,OAAoBF,EAAAA,cAAoB47B,GAAAA,GAAUhP,EAAAA,GAAAA,IAAcA,EAAAA,GAAAA,GAAc,CAAC,EAAGtsB,GAAQ,CAAC,EAAG,CAC5FJ,IAAKA,EACL04B,KAAMsvP,KAEV,EACAD,GAAa5tP,YAAc,eAC3B,SAA4Br6B,EAAAA,WAAiBioR,8BCb7C,MACA,GADkB1ka,IAAU+nB,MAAMsY,WAAWrgC,KAAWknC,SAASlnC,GCAjE,IAAI02L,GAAgC,SAAUxzL,EAAGmD,GAC/C,IAAI5F,EAAI,CAAC,EACT,IAAK,IAAI8sB,KAAKrqB,EAAOuY,OAAO7W,UAAUi3I,eAAe58I,KAAKiE,EAAGqqB,IAAMlnB,EAAEnI,QAAQqvB,GAAK,IAAG9sB,EAAE8sB,GAAKrqB,EAAEqqB,IAC9F,GAAS,MAALrqB,GAAqD,oBAAjCuY,OAAOk7K,sBAA2C,KAAI73L,EAAI,EAAb,IAAgByuB,EAAI9R,OAAOk7K,sBAAsBzzL,GAAIpE,EAAIyuB,EAAEvuB,OAAQF,IAClIuH,EAAEnI,QAAQqvB,EAAEzuB,IAAM,GAAK2c,OAAO7W,UAAUgyL,qBAAqB33L,KAAKiE,EAAGqqB,EAAEzuB,MAAK2B,EAAE8sB,EAAEzuB,IAAMoE,EAAEqqB,EAAEzuB,IADuB,CAGvH,OAAO2B,CACT,EAWA,MAAMmka,GAAkB,CACtBr0O,GAAI,WACJE,GAAI,WACJE,GAAI,WACJE,GAAI,WACJE,GAAI,YACJE,IAAK,aAEM4zO,GAA4BpoR,EAAAA,cAAoB,CAAC,GACxDqoR,GAAa,MACjB,IAAIhma,EAAI,EACR,OAAO,WAGL,OADAA,GAAK,EACE,GAAP,OAFakzB,UAAUhzB,OAAS,QAAsBlB,IAAjBk0B,UAAU,GAAmBA,UAAU,GAAK,IAEjE,OAAGlzB,EACrB,CACD,EAPkB,GAQbima,GAAqBtoR,EAAAA,YAAiB,CAACkY,EAAIhY,KAC/C,IACIg6B,UAAWmgB,EAAkB,UAC7BlvB,EAAS,QACTshE,EAAO,SACP/mN,EAAQ,iBACR6iZ,GAAmB,EAAK,MACxB9hQ,EAAQ,OAAM,MACdhjI,EAAQ,CAAC,EAAC,YACV+kY,GAAc,EAAK,aACnBC,GAAe,EAAK,MACpBpga,EAAQ,IAAG,eACXqga,EAAiB,GAAE,sBACnBC,EAAqB,WACrB9zO,EAAU,WACV+zO,EAAU,aACVC,GACE3wQ,EACJ5X,EAAQ25C,GAAO/hC,EAAI,CAAC,YAAa,YAAa,UAAW,WAAY,mBAAoB,QAAS,QAAS,cAAe,eAAgB,QAAS,iBAAkB,wBAAyB,aAAc,aAAc,iBAC5N,MAAM,UACJivQ,IACEptP,EAAAA,EAAAA,YAAWmtP,KACR4B,EAAWC,IAAgBzzQ,EAAAA,EAAAA,UAAS,cAAehV,EAAQA,EAAMwoR,UAAYP,IAC7ES,EAAOC,IAAY3zQ,EAAAA,EAAAA,WAAS,IACnC7W,EAAAA,EAAAA,YAAU,KACJ,cAAe6B,GACjByoR,EAAazoR,EAAMwoR,UACrB,GACC,CAACxoR,EAAMwoR,YACV,MAAMI,EAAqB,CAAC3la,EAAOpC,KAC3B,cAAem/I,GACnByoR,EAAaxla,GAEA,OAAfqla,QAAsC,IAAfA,GAAiCA,EAAWrla,EAAOpC,EAAK,EAG3Egoa,GAAuBlgR,EAAAA,EAAAA,UAC7BkgR,EAAqBvgU,QAAUotF,IAC7BizO,EAASjzO,EAAI9wD,SACI,OAAjB2jS,QAA0C,IAAjBA,GAAmCA,EAAa7yO,EAAI9wD,SACzE4jS,IAAc9yO,EAAI9wD,SACpBgkS,EAAmBlzO,EAAI9wD,QAAS,aAClC,GAEFuZ,EAAAA,EAAAA,YAAU,KACR,SAAS2qR,EAAkBpzO,GACzB,OAAOmzO,EAAqBvgU,QAAQotF,EACtC,CACA,IAAIA,EACJ,GAAsB,qBAAXj9D,OAAwB,CACjC,MAAM,WACJm9D,GACEn9D,OACJ,GAAIm9D,GAAcrB,GAAcA,KAAcszO,GAAiB,CAC7DnyO,EAAME,EAAW,eAAD,OAAgBiyO,GAAgBtzO,GAAW,MAC3D,IACEmB,EAAI90L,iBAAiB,SAAUkoa,EAGjC,CAFE,MAAO5zY,GACPwgK,EAAIG,YAAYizO,EAClB,CACAA,EAAkBpzO,EACpB,CACF,CACA,MAAO,KACL,IACU,OAARA,QAAwB,IAARA,GAA0BA,EAAIp0L,oBAAoB,SAAUwna,EAG9E,CAFE,MAAO5zY,GACC,OAARwgK,QAAwB,IAARA,GAA0BA,EAAIC,eAAemzO,EAC/D,EACD,GACA,CAACv0O,KACJp2C,EAAAA,EAAAA,YAAU,KACR,MAAMo3J,EAAWwyH,GAAW,cAE5B,OADAlB,EAAUC,SAASvxH,GACZ,IAAMsxH,EAAUE,YAAYxxH,EAAS,GAC3C,IACH,MAAM/jR,EAAS,KACbo3Y,GAAoBJ,EAAW,eAAe,GAE1C,aACJrvO,IACE1f,EAAAA,EAAAA,YAAW2f,GAAAA,IA+CTmuO,EAAe7nR,EAAAA,SAAc,KAAM,CACvCqpR,eAAgBP,KACd,CAACA,IACL,OAAoB9oR,EAAAA,cAAoBooR,GAAah0Q,SAAU,CAC7D7wJ,MAAOska,GAlDW,MAClB,MAAM3tP,EAAYuf,EAAa,eAAgBY,GACzCk0N,GAAWhqN,EAAAA,GAAAA,GAAKjkD,EAAO,CAAC,cACxBgpR,EAAWR,EAAYJ,EAAiBrga,EAExCkha,EAAaC,GAAUF,GAAY,GAAH,OAAMA,EAAQ,MAAO97X,OAAO87X,GAE5DG,EAA+D,IAA5C7lY,WAAW4J,OAAOk7X,GAAkB,IAAyB1oR,EAAAA,cAAoB,OAAQ,CAChH4Y,QAAS9mI,EACTq5I,UAAWiQ,KAAW,GAAD,OAAIlB,EAAS,iCAA0BA,EAAS,+BAAuBuuP,EAAe,QAAU,SACrHhlY,MAAOklY,GACNl8L,GAAwBzsF,EAAAA,cAAoBioR,GAAc,OAAS,KAMhEyB,EALU,CACd/vL,SAAU8uL,EAA4BzoR,EAAAA,cAAoB88B,GAAAA,EAAe,MAAqB98B,EAAAA,cAAoB08B,GAAAA,EAAc,MAChIosP,UAAWL,EAA4BzoR,EAAAA,cAAoB08B,GAAAA,EAAc,MAAqB18B,EAAAA,cAAoB88B,GAAAA,EAAe,OAEpHgsP,EAAY,YAAc,YAEnCa,EAAyB,OAAZl9L,EAAmBg9L,GAAiCzpR,EAAAA,cAAoB,MAAO,CAChGmrB,UAAW,GAAF,OAAK+O,EAAS,YACvBthB,QAAS9mI,EACT2R,MAAO,CACLp7B,MAAOkha,IAER98L,GAAWi9L,GAAkB,KAC1BE,EAAW5qZ,OAAOqD,OAAOrD,OAAOqD,OAAO,CAAC,EAAGohB,GAAQ,CACvDkqI,KAAM,OAAF,OAAS47P,GACb36N,SAAU26N,EACVxrO,SAAUwrO,EACVlha,MAAOkha,IAEHM,EAAWzuP,KAAWlB,EAAW,GAAF,OAAKA,EAAS,YAAIzT,GAAS,CAC9D,CAAC,GAAD,OAAIyT,EAAS,iBAAiB4uP,EAC9B,CAAC,GAAD,OAAI5uP,EAAS,iBAAiBsuP,GAA2B,OAAZ/7L,IAAqBg9L,EAClE,CAAC,GAAD,OAAIvvP,EAAS,aAAa8uP,EAC1B,CAAC,GAAD,OAAI9uP,EAAS,gBAA2C,IAA3Bt2I,WAAW2lY,IACvCp+P,GACH,OAAoBnrB,EAAAA,cAAoB,QAAShhI,OAAOqD,OAAO,CAC7D8oJ,UAAW0+P,GACVtb,EAAU,CACX9qX,MAAOmmY,EACP1pR,IAAKA,IACUF,EAAAA,cAAoB,MAAO,CAC1CmrB,UAAW,GAAF,OAAK+O,EAAS,cACtBx0J,GAAW8iZ,GAAeQ,GAASS,EAAmBE,EAAa,KAAK,EAO1EG,GAAc,IAKnB,YC3KMhC,GAASiC,GACfjC,GAAOC,OAASA,GAChBD,GAAOE,OAASA,GAChBF,GAAOvjG,QAAUA,GACjBujG,GAAOQ,MAAQA,GACf,aCJQP,OAAM,GAAExjG,QAAO,GAAEyjG,OAAO,IAAIF,GAG9BkC,IAAc,IAAIhvS,MAAOivS,cAGzBC,GAAe,QAAC,SAAExkZ,GAAU,SAEhC,WAAC,GAAM,CAACylJ,UAAU,SAAQ,WACxB,UAAC,GAAM,CAACr1I,GAAG,SAAQ,UACf,iBAAKq1I,UAAU,OAAM,UACnB,iBAAKjvJ,IAAI,YAAY7T,MAAO,WAIhC,UAAC,GAAO,CACN8iK,UAAWvC,GAAmB,UAW9B,iBAAKuC,UAAU,sBAAqB,SAC/BzlJ,OAGP,WAAC,GAAM,CACL+d,MAAO,CACLq5J,UAAW,UACX,UACH,iBACkBktO,GAAY,4BAExB,EAKbE,GAAa93M,aAAe,CAAC,EAE7B,YCvCa64H,EAAAA,WAAoB15U,SAASkrP,eAAe,SACpDvoN,QACH,UAAC05W,GAAa,WAEd,UAAC,GAAY,WACb,UAAC,GAAG,SAaNuc","sources":["../node_modules/three/build/three.module.js","../node_modules/zustand/esm/index.js","../node_modules/suspend-react/dist/index.js","../node_modules/@react-three/fiber/dist/index-bb759d07.esm.js","../node_modules/react-use-measure/dist/web.js","../node_modules/its-fine/src/index.tsx","../node_modules/@react-three/fiber/dist/react-three-fiber.esm.js","../node_modules/@react-three/drei/core/useTexture.js","../node_modules/three-stdlib/controls/OrbitControls.js","../node_modules/@react-three/drei/core/OrbitControls.js","component/public/cubePreview/cubePreview.js","../node_modules/@ant-design/colors/es/generate.js","../node_modules/@ant-design/colors/es/index.js","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/@ant-design/cssinjs/es/Cache.js","../node_modules/@ant-design/cssinjs/es/StyleContext.js","../node_modules/@ant-design/cssinjs/es/hooks/useHMR.js","../node_modules/@ant-design/cssinjs/es/hooks/useGlobalCache.js","../node_modules/@ant-design/cssinjs/es/util.js","../node_modules/@ant-design/cssinjs/es/hooks/useCacheToken.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/@ant-design/cssinjs/es/hooks/useStyleRegister.js","../node_modules/@ant-design/cssinjs/es/Keyframes.js","../node_modules/@ant-design/cssinjs/es/theme/ThemeCache.js","../node_modules/@ant-design/cssinjs/es/theme/Theme.js","../node_modules/@ant-design/cssinjs/es/theme/createTheme.js","../node_modules/@ant-design/cssinjs/es/transformers/legacyLogicalProperties.js","../node_modules/@ant-design/icons/es/utils.js","../node_modules/@ant-design/icons/es/components/IconBase.js","../node_modules/@ant-design/icons/es/components/twoTonePrimaryColor.js","../node_modules/@ant-design/icons/es/components/AntdIcon.js","../node_modules/@ant-design/icons/es/components/Context.js","../node_modules/@ant-design/icons-svg/es/asn/CheckCircleFilled.js","../node_modules/@ant-design/icons/es/icons/CheckCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/CheckOutlined.js","../node_modules/@ant-design/icons/es/icons/CheckOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CloseCircleFilled.js","../node_modules/@ant-design/icons/es/icons/CloseCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/CloseOutlined.js","../node_modules/@ant-design/icons/es/icons/CloseOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ExclamationCircleFilled.js","../node_modules/@ant-design/icons/es/icons/ExclamationCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/EyeOutlined.js","../node_modules/@ant-design/icons/es/icons/EyeOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/InfoCircleFilled.js","../node_modules/@ant-design/icons/es/icons/InfoCircleFilled.js","../node_modules/@ant-design/icons-svg/es/asn/LeftOutlined.js","../node_modules/@ant-design/icons/es/icons/LeftOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/LoadingOutlined.js","../node_modules/@ant-design/icons/es/icons/LoadingOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/RightOutlined.js","../node_modules/@ant-design/icons/es/icons/RightOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/RotateLeftOutlined.js","../node_modules/@ant-design/icons/es/icons/RotateLeftOutlined.js","../node_modules/@ctrl/tinycolor/dist/module/conversion.js","../node_modules/@ctrl/tinycolor/dist/module/css-color-names.js","../node_modules/@ctrl/tinycolor/dist/module/format-input.js","../node_modules/@ctrl/tinycolor/dist/module/index.js","../node_modules/@ctrl/tinycolor/dist/module/util.js","../node_modules/@rc-component/portal/es/Context.js","../node_modules/@rc-component/portal/es/useDom.js","../node_modules/rc-util/es/getScrollBarSize.js","../node_modules/@rc-component/portal/es/useScrollLocker.js","../node_modules/@rc-component/portal/es/util.js","../node_modules/@rc-component/portal/es/mock.js","../node_modules/@rc-component/portal/es/Portal.js","../node_modules/@rc-component/portal/es/index.js","../node_modules/@react-three/fiber/node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/@react-three/fiber/node_modules/scheduler/index.js","../node_modules/antd/es/_util/hooks/useFlexGapSupport.js","../node_modules/antd/es/_util/hooks/useForceUpdate.js","../node_modules/antd/es/_util/motion.js","../node_modules/antd/es/_util/reactNode.js","../node_modules/antd/es/_util/responsiveObserver.js","../node_modules/antd/es/_util/statusUtils.js","../node_modules/antd/es/_util/styleChecker.js","../node_modules/antd/es/_util/wave/style.js","../node_modules/antd/es/_util/wave/util.js","../node_modules/antd/es/_util/wave/WaveEffect.js","../node_modules/antd/es/_util/wave/useWave.js","../node_modules/antd/es/_util/wave/index.js","../node_modules/antd/es/button/button-group.js","../node_modules/antd/es/button/buttonHelpers.js","../node_modules/antd/es/button/LoadingIcon.js","../node_modules/antd/es/button/style/group.js","../node_modules/antd/es/style/compact-item-vertical.js","../node_modules/antd/es/button/style/index.js","../node_modules/antd/es/button/button.js","../node_modules/antd/es/button/index.js","../node_modules/antd/es/grid/col.js","../node_modules/antd/es/col/index.js","../node_modules/antd/es/config-provider/DisabledContext.js","../node_modules/antd/es/config-provider/SizeContext.js","../node_modules/antd/es/config-provider/context.js","../node_modules/antd/es/locale/index.js","../node_modules/antd/es/config-provider/cssVariables.js","../node_modules/antd/es/config-provider/style/index.js","../node_modules/antd/es/config-provider/index.js","../node_modules/antd/es/config-provider/hooks/useTheme.js","../node_modules/rc-picker/es/locale/en_US.js","../node_modules/antd/es/date-picker/locale/en_US.js","../node_modules/antd/es/form/context.js","../node_modules/antd/es/grid/RowContext.js","../node_modules/antd/es/grid/style/index.js","../node_modules/rc-util/es/Dom/css.js","../node_modules/rc-image/es/PreviewGroup.js","../node_modules/rc-image/es/previewConfig.js","../node_modules/rc-image/es/Operations.js","../node_modules/rc-image/es/hooks/useImageTransform.js","../node_modules/rc-image/es/getFixScaleEleTransPosition.js","../node_modules/rc-image/es/Preview.js","../node_modules/rc-image/es/Image.js","../node_modules/rc-image/es/index.js","../node_modules/@ant-design/icons-svg/es/asn/RotateRightOutlined.js","../node_modules/@ant-design/icons/es/icons/RotateRightOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ZoomInOutlined.js","../node_modules/@ant-design/icons/es/icons/ZoomInOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/ZoomOutOutlined.js","../node_modules/@ant-design/icons/es/icons/ZoomOutOutlined.js","../node_modules/antd/es/image/style/index.js","../node_modules/antd/es/image/PreviewGroup.js","../node_modules/antd/es/image/index.js","../node_modules/antd/es/input/Input.js","../node_modules/antd/es/input/utils.js","../node_modules/rc-textarea/es/calculateNodeHeight.js","../node_modules/rc-textarea/es/ResizableTextArea.js","../node_modules/rc-textarea/es/TextArea.js","../node_modules/rc-textarea/es/index.js","../node_modules/antd/es/input/TextArea.js","../node_modules/antd/es/input/hooks/useRemovePasswordTimeout.js","../node_modules/antd/es/input/style/index.js","../node_modules/antd/es/locale/LocaleReceiver.js","../node_modules/antd/es/locale/context.js","../node_modules/antd/es/calendar/locale/en_US.js","../node_modules/antd/es/locale/en_US.js","../node_modules/rc-pagination/es/locale/en_US.js","../node_modules/antd/es/modal/locale.js","../node_modules/antd/es/modal/style/index.js","../node_modules/rc-progress/es/common.js","../node_modules/rc-progress/es/Line.js","../node_modules/rc-progress/es/hooks/useId.js","../node_modules/rc-progress/es/Circle.js","../node_modules/antd/es/progress/utils.js","../node_modules/antd/es/progress/Circle.js","../node_modules/antd/es/progress/Line.js","../node_modules/antd/es/progress/Steps.js","../node_modules/antd/es/progress/style/index.js","../node_modules/antd/es/progress/progress.js","../node_modules/antd/es/progress/index.js","../node_modules/antd/es/grid/row.js","../node_modules/antd/es/row/index.js","../node_modules/antd/es/space/Compact.js","../node_modules/antd/es/space/Item.js","../node_modules/antd/es/space/index.js","../node_modules/antd/es/space/style/compact.js","../node_modules/antd/es/space/style/index.js","../node_modules/antd/es/style/compact-item.js","../node_modules/antd/es/style/index.js","../node_modules/antd/es/style/motion/fade.js","../node_modules/antd/es/style/motion/motion.js","../node_modules/antd/es/style/motion/zoom.js","../node_modules/antd/es/style/roundedArrow.js","../node_modules/antd/es/theme/themes/dark/colorAlgorithm.js","../node_modules/antd/es/theme/themes/dark/colors.js","../node_modules/antd/es/theme/themes/dark/index.js","../node_modules/antd/es/theme/themes/compact/index.js","../node_modules/antd/es/theme/themes/compact/genCompactSizeMapToken.js","../node_modules/antd/es/theme/index.js","../node_modules/antd/es/version/version.js","../node_modules/antd/es/version/index.js","../node_modules/antd/es/theme/util/getAlphaColor.js","../node_modules/antd/es/theme/util/alias.js","../node_modules/antd/es/theme/internal.js","../node_modules/antd/es/theme/themes/shared/genRadius.js","../node_modules/antd/es/theme/themes/default/colorAlgorithm.js","../node_modules/antd/es/theme/themes/default/colors.js","../node_modules/antd/es/theme/themes/default/index.js","../node_modules/antd/es/theme/themes/shared/genSizeMapToken.js","../node_modules/antd/es/theme/themes/shared/genCommonMapToken.js","../node_modules/antd/es/theme/themes/seed.js","../node_modules/antd/es/theme/themes/shared/genColorMapToken.js","../node_modules/antd/es/theme/themes/shared/genControlHeight.js","../node_modules/antd/es/theme/themes/shared/genFontMapToken.js","../node_modules/antd/es/theme/themes/shared/genFontSizes.js","../node_modules/antd/es/theme/util/genComponentStyleHook.js","../node_modules/antd/es/theme/util/statistic.js","../node_modules/antd/es/time-picker/locale/en_US.js","../node_modules/rc-tooltip/es/placements.js","../node_modules/rc-tooltip/es/Popup.js","../node_modules/rc-tooltip/es/Tooltip.js","../node_modules/rc-tooltip/es/index.js","../node_modules/antd/es/_util/placements.js","../node_modules/antd/es/theme/interface/presetColors.js","../node_modules/antd/es/style/presetColor.js","../node_modules/antd/es/style/placementArrow.js","../node_modules/antd/es/tooltip/style/index.js","../node_modules/antd/es/_util/colors.js","../node_modules/antd/es/tooltip/util.js","../node_modules/antd/es/tooltip/index.js","../node_modules/antd/es/tooltip/PurePanel.js","../node_modules/@ant-design/icons-svg/es/asn/CopyOutlined.js","../node_modules/@ant-design/icons/es/icons/CopyOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/EditOutlined.js","../node_modules/@ant-design/icons/es/icons/EditOutlined.js","../node_modules/antd/es/_util/transButton.js","../node_modules/rc-util/es/Dom/styleChecker.js","../node_modules/@ant-design/icons-svg/es/asn/EnterOutlined.js","../node_modules/@ant-design/icons/es/icons/EnterOutlined.js","../node_modules/antd/es/typography/Editable.js","../node_modules/antd/es/typography/hooks/useMergedConfig.js","../node_modules/antd/es/typography/hooks/useUpdatedEffect.js","../node_modules/antd/es/typography/Base/Ellipsis.js","../node_modules/antd/es/typography/Base/EllipsisTooltip.js","../node_modules/antd/es/typography/Base/index.js","../node_modules/antd/es/typography/Title.js","../node_modules/antd/es/typography/Typography.js","../node_modules/antd/es/typography/Link.js","../node_modules/antd/es/typography/Paragraph.js","../node_modules/antd/es/typography/Text.js","../node_modules/antd/es/typography/index.js","../node_modules/antd/es/style/operationUnit.js","../node_modules/antd/es/typography/style/mixins.js","../node_modules/antd/es/typography/style/index.js","../node_modules/classnames/index.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/copy-to-clipboard/index.js","../node_modules/debounce/index.js","../node_modules/fabric/dist/fabric.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/rc-util/es/hooks/useId.js","../node_modules/rc-dialog/es/Dialog/Mask.js","../node_modules/rc-dialog/es/util.js","../node_modules/rc-dialog/es/Dialog/Content/MemoChildren.js","../node_modules/rc-dialog/es/Dialog/Content/Panel.js","../node_modules/rc-dialog/es/Dialog/Content/index.js","../node_modules/rc-dialog/es/Dialog/index.js","../node_modules/rc-dialog/es/DialogWrap.js","../node_modules/rc-dialog/es/index.js","../node_modules/rc-field-form/es/FieldContext.js","../node_modules/rc-field-form/es/utils/typeUtil.js","../node_modules/src/util.ts","../node_modules/src/rule/required.ts","../node_modules/src/rule/url.ts","../node_modules/src/rule/type.ts","../node_modules/src/rule/enum.ts","../node_modules/src/rule/index.ts","../node_modules/src/rule/whitespace.ts","../node_modules/src/rule/range.ts","../node_modules/src/rule/pattern.ts","../node_modules/src/validator/type.ts","../node_modules/src/validator/index.ts","../node_modules/src/validator/string.ts","../node_modules/src/validator/method.ts","../node_modules/src/validator/number.ts","../node_modules/src/validator/boolean.ts","../node_modules/src/validator/regexp.ts","../node_modules/src/validator/integer.ts","../node_modules/src/validator/float.ts","../node_modules/src/validator/array.ts","../node_modules/src/validator/object.ts","../node_modules/src/validator/enum.ts","../node_modules/src/validator/pattern.ts","../node_modules/src/validator/date.ts","../node_modules/src/validator/required.ts","../node_modules/src/validator/any.ts","../node_modules/src/messages.ts","../node_modules/src/index.ts","../node_modules/rc-field-form/es/utils/messages.js","../node_modules/rc-util/es/utils/get.js","../node_modules/rc-util/es/utils/set.js","../node_modules/rc-field-form/es/utils/cloneDeep.js","../node_modules/rc-field-form/es/utils/valueUtil.js","../node_modules/rc-field-form/es/utils/validateUtil.js","../node_modules/rc-field-form/es/Field.js","../node_modules/rc-field-form/es/ListContext.js","../node_modules/rc-field-form/es/List.js","../node_modules/rc-field-form/es/utils/NameMap.js","../node_modules/rc-field-form/es/useForm.js","../node_modules/rc-field-form/es/utils/asyncUtil.js","../node_modules/rc-field-form/es/FormContext.js","../node_modules/rc-field-form/es/Form.js","../node_modules/rc-field-form/es/useWatch.js","../node_modules/rc-field-form/es/index.js","../node_modules/rc-input/es/BaseInput.js","../node_modules/rc-input/es/Input.js","../node_modules/rc-input/es/index.js","../node_modules/rc-input/es/utils/commonUtils.js","../node_modules/rc-motion/es/util/motion.js","../node_modules/rc-motion/es/interface.js","../node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js","../node_modules/rc-motion/es/hooks/useStepQueue.js","../node_modules/rc-motion/es/hooks/useNextFrame.js","../node_modules/rc-motion/es/hooks/useDomMotionEvents.js","../node_modules/rc-motion/es/DomWrapper.js","../node_modules/rc-motion/es/CSSMotion.js","../node_modules/rc-motion/es/hooks/useStatus.js","../node_modules/rc-motion/es/util/diff.js","../node_modules/rc-motion/es/CSSMotionList.js","../node_modules/rc-motion/es/index.js","../node_modules/rc-resize-observer/es/utils/observerUtil.js","../node_modules/rc-resize-observer/es/SingleObserver/DomWrapper.js","../node_modules/rc-resize-observer/es/Collection.js","../node_modules/rc-resize-observer/es/SingleObserver/index.js","../node_modules/rc-resize-observer/es/index.js","../node_modules/rc-util/es/Portal.js","../node_modules/rc-trigger/es/utils/alignUtil.js","../node_modules/rc-trigger/es/utils/legacyUtil.js","../node_modules/rc-trigger/es/Popup/Mask.js","../node_modules/src/propertyUtils.js","../node_modules/src/utils.js","../node_modules/src/getOffsetParent.js","../node_modules/src/isAncestorFixed.js","../node_modules/src/getVisibleRectForElement.js","../node_modules/src/getRegion.js","../node_modules/src/getAlignOffset.js","../node_modules/src/getElFuturePos.js","../node_modules/src/align/align.js","../node_modules/src/adjustForViewport.js","../node_modules/src/align/alignElement.js","../node_modules/rc-align/es/util.js","../node_modules/rc-align/es/Align.js","../node_modules/rc-align/es/hooks/useBuffer.js","../node_modules/src/align/alignPoint.js","../node_modules/rc-align/es/index.js","../node_modules/rc-trigger/es/Popup/useVisibleStatus.js","../node_modules/rc-trigger/es/Popup/PopupInner.js","../node_modules/rc-trigger/es/Popup/useStretchStyle.js","../node_modules/rc-trigger/es/Popup/MobilePopupInner.js","../node_modules/rc-trigger/es/Popup/index.js","../node_modules/rc-trigger/es/context.js","../node_modules/rc-trigger/es/index.js","../node_modules/rc-util/es/Children/toArray.js","../node_modules/rc-util/es/Dom/addEventListener.js","../node_modules/rc-util/es/Dom/canUseDom.js","../node_modules/rc-util/es/Dom/contains.js","../node_modules/rc-util/es/Dom/dynamicCSS.js","../node_modules/rc-util/es/Dom/findDOMNode.js","../node_modules/rc-util/es/Dom/isVisible.js","../node_modules/rc-util/es/KeyCode.js","../node_modules/rc-util/es/React/render.js","../node_modules/rc-util/es/hooks/useLayoutEffect.js","../node_modules/rc-util/es/hooks/useMemo.js","../node_modules/rc-util/es/hooks/useEvent.js","../node_modules/rc-util/es/hooks/useMergedState.js","../node_modules/rc-util/es/hooks/useState.js","../node_modules/rc-util/es/isEqual.js","../node_modules/rc-util/es/isMobile.js","../node_modules/rc-util/es/omit.js","../node_modules/rc-util/es/pickAttrs.js","../node_modules/rc-util/es/raf.js","../node_modules/rc-util/es/ref.js","../node_modules/rc-util/es/warning.js","../node_modules/rc-util/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/rc-util/node_modules/react-is/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-draggable/build/cjs/Draggable.js","../node_modules/react-draggable/build/cjs/DraggableCore.js","../node_modules/react-draggable/build/cjs/cjs.js","../node_modules/react-draggable/build/cjs/utils/domFns.js","../node_modules/react-draggable/build/cjs/utils/getPrefix.js","../node_modules/react-draggable/build/cjs/utils/log.js","../node_modules/react-draggable/build/cjs/utils/positionFns.js","../node_modules/react-draggable/build/cjs/utils/shims.js","../node_modules/react-reconciler/cjs/react-reconciler-constants.production.min.js","../node_modules/react-reconciler/cjs/react-reconciler.production.min.js","../node_modules/react-reconciler/constants.js","../node_modules/react-reconciler/index.js","../node_modules/react-reconciler/node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/react-reconciler/node_modules/scheduler/index.js","../node_modules/cnbuilder/esm/cnb.js","../node_modules/zoom-level/dist/zoom-level.esm.js","../node_modules/react-scrollbars-custom/dist/rsc.esm.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/toggle-selection/index.js","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/toArray.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/fabricjs-react/dist/fabricjs-react.es.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/css loading","../webpack/runtime/jsonp chunk loading","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/use-sync-external-store-shim/useSyncExternalStoreShimClient.ts","../node_modules/react-router/lib/use-sync-external-store-shim/index.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/index.tsx","component/public/EditItem/EditItem.js","webpack://product_customizer/./src/component/public/home/home.module.css?4f74","../node_modules/rc-notification/es/Notice.js","../node_modules/rc-notification/es/Notifications.js","../node_modules/rc-notification/es/useNotification.js","../node_modules/antd/es/message/style/index.js","../node_modules/antd/es/message/PurePanel.js","../node_modules/antd/es/message/util.js","../node_modules/antd/es/message/useMessage.js","../node_modules/antd/es/message/index.js","../node_modules/throttle-debounce/debounce.js","../node_modules/throttle-debounce/throttle.js","../node_modules/antd/es/spin/style/index.js","../node_modules/antd/es/spin/index.js","../node_modules/rc-steps/es/Step.js","../node_modules/rc-steps/es/Steps.js","../node_modules/rc-steps/es/index.js","../node_modules/antd/es/grid/hooks/useBreakpoint.js","../node_modules/antd/es/steps/style/custom-icon.js","../node_modules/antd/es/steps/style/label-placement.js","../node_modules/antd/es/steps/style/nav.js","../node_modules/antd/es/steps/style/progress.js","../node_modules/antd/es/steps/style/progress-dot.js","../node_modules/antd/es/steps/style/rtl.js","../node_modules/antd/es/steps/style/small.js","../node_modules/antd/es/steps/style/vertical.js","../node_modules/antd/es/steps/style/inline.js","../node_modules/antd/es/steps/style/index.js","../node_modules/antd/es/steps/index.js","../node_modules/antd/es/steps/useLegacyItems.js","component/public/selectsize/selectsize.lazy.js","component/public/SelectShape/SelectShape.lazy.js","../node_modules/@ant-design/icons-svg/es/asn/CaretLeftOutlined.js","../node_modules/@ant-design/icons/es/icons/CaretLeftOutlined.js","../node_modules/@ant-design/icons-svg/es/asn/CaretRightOutlined.js","../node_modules/@ant-design/icons/es/icons/CaretRightOutlined.js","component/public/Background/Background.lazy.js","component/public/Addon/Addon.lazy.js","component/public/Text/Text.lazy.js","component/public/Summary/Summary.lazy.js","component/public/Stain/Stain.lazy.js","component/public/Painted/Painted.lazy.js","webpack://product_customizer/./src/component/public/ChangeColors/ChangeColors.module.css?a545","component/public/ChangeColors/ChangeColors.js","component/public/fabdesign/fabdesign.lazy.js","component/public/endResult/endResult.js","component/public/ProductStyleComponent/ProductStyleComponent.lazy.js","webpack://product_customizer/./src/component/public/ProductShapeComponent/ProductShapeComponent.module.css?ef06","component/public/ProductShapeComponent/ProductShapeComponent.js","component/public/home/home.js","component/public/viewitem/viewitem.module.css","component/public/viewitem/viewitem.js","App.js","reportWebVitals.js","webpack://product_customizer/./src/component/layout/publiclayout/publiclayout.module.css?f0ff","../node_modules/antd/es/layout/style/light.js","../node_modules/antd/es/layout/style/index.js","../node_modules/antd/es/layout/layout.js","../node_modules/@ant-design/icons-svg/es/asn/BarsOutlined.js","../node_modules/@ant-design/icons/es/icons/BarsOutlined.js","../node_modules/antd/es/_util/isNumeric.js","../node_modules/antd/es/layout/Sider.js","../node_modules/antd/es/layout/index.js","component/layout/publiclayout/publiclayout.js","index.js"],"sourcesContent":["/**\n * @license\n * Copyright 2010-2023 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '150';\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst TwoPassDoubleSide = 2; // r149\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst AlphaFormat = 1021;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst LinearEncoding = 3000;\nconst sRGBEncoding = 3001;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst _SRGBAFormat = 1035; // fallback for WebGL 1\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor() {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, x,\n\t\t\t0, 1, y,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update !== false ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize();\n\t\t\tthis._onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// Derived from http://planning.cs.uiuc.edu/node198.html\n\t\t// Note, this source uses w, x, y, z ordering,\n\t\t// so we swap the order below.\n\n\t\tconst u1 = Math.random();\n\t\tconst sqrt1u1 = Math.sqrt( 1 - u1 );\n\t\tconst sqrtu1 = Math.sqrt( u1 );\n\n\t\tconst u2 = 2 * Math.PI * Math.random();\n\n\t\tconst u3 = 2 * Math.PI * Math.random();\n\n\t\treturn this.set(\n\t\t\tsqrt1u1 * Math.cos( u2 ),\n\t\t\tsqrtu1 * Math.sin( u3 ),\n\t\t\tsqrtu1 * Math.cos( u3 ),\n\t\t\tsqrt1u1 * Math.sin( u2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// calculate quat * vector\n\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = - qx * x - qy * y - qz * z;\n\n\t\t// calculate result * inverse quat\n\n\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$d.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$d );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$d.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// Derived from https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst u = ( Math.random() - 0.5 ) * 2;\n\t\tconst t = Math.random() * Math.PI * 2;\n\t\tconst f = Math.sqrt( 1 - u ** 2 );\n\n\t\tthis.x = f * Math.cos( t );\n\t\tthis.y = f * Math.sin( t );\n\t\tthis.z = u;\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$d = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = new Matrix3().fromArray( [\n\t0.8224621, 0.0331941, 0.0170827,\n\t0.1775380, 0.9668058, 0.0723974,\n\t- 0.0000001, 0.0000001, 0.9105199\n] );\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = new Matrix3().fromArray( [\n\t1.2249401, - 0.0420569, - 0.0196376,\n\t- 0.2249404, 1.0420571, - 0.0786361,\n\t0.0000001, 0.0000000, 1.0982735\n] );\n\nconst _vector$c = new Vector3();\n\nfunction DisplayP3ToLinearSRGB( color ) {\n\n\tcolor.convertSRGBToLinear();\n\n\t_vector$c.set( color.r, color.g, color.b ).applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB );\n\n\treturn color.setRGB( _vector$c.x, _vector$c.y, _vector$c.z );\n\n}\n\nfunction LinearSRGBToDisplayP3( color ) {\n\n\t_vector$c.set( color.r, color.g, color.b ).applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 );\n\n\treturn color.setRGB( _vector$c.x, _vector$c.y, _vector$c.z ).convertLinearToSRGB();\n\n}\n\n// Conversions from to Linear-sRGB reference space.\nconst TO_LINEAR = {\n\t[ LinearSRGBColorSpace ]: ( color ) => color,\n\t[ SRGBColorSpace ]: ( color ) => color.convertSRGBToLinear(),\n\t[ DisplayP3ColorSpace ]: DisplayP3ToLinearSRGB,\n};\n\n// Conversions to from Linear-sRGB reference space.\nconst FROM_LINEAR = {\n\t[ LinearSRGBColorSpace ]: ( color ) => color,\n\t[ SRGBColorSpace ]: ( color ) => color.convertLinearToSRGB(),\n\t[ DisplayP3ColorSpace ]: LinearSRGBToDisplayP3,\n};\n\nconst ColorManagement = {\n\n\tenabled: false,\n\n\tget legacyMode() {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );\n\n\t\treturn ! this.enabled;\n\n\t},\n\n\tset legacyMode( legacyMode ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );\n\n\t\tthis.enabled = ! legacyMode;\n\n\t},\n\n\tget workingColorSpace() {\n\n\t\treturn LinearSRGBColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tconsole.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToLinear = TO_LINEAR[ sourceColorSpace ];\n\t\tconst targetFromLinear = FROM_LINEAR[ targetColorSpace ];\n\n\t\tif ( sourceToLinear === undefined || targetFromLinear === undefined ) {\n\n\t\t\tthrow new Error( `Unsupported color space conversion, \"${ sourceColorSpace }\" to \"${ targetColorSpace }\".` );\n\n\t\t}\n\n\t\treturn targetFromLinear( sourceToLinear( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this.workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this.workingColorSpace );\n\n\t},\n\n};\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement == 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, encoding = LinearEncoding ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.encoding = source.encoding;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tencoding: this.encoding,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass WebGLRenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\tthis.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.flipY = false;\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;\n\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t\tthis.samples = options.samples !== undefined ? options.samples : 0;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tthis.texture.image.width = width;\n\t\t\tthis.texture.image.height = height;\n\t\t\tthis.texture.image.depth = depth;\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.texture = source.texture.clone();\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( width, height );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( width, height );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t\tconst texture = this.texture;\n\n\t\tthis.texture = [];\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.texture[ i ] = texture.clone();\n\t\t\tthis.texture[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.texture.length; i < il; i ++ ) {\n\n\t\t\t\tthis.texture[ i ].image.width = width;\n\t\t\t\tthis.texture[ i ].image.height = height;\n\t\t\t\tthis.texture[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.dispose();\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.viewport.set( 0, 0, this.width, this.height );\n\t\tthis.scissor.set( 0, 0, this.width, this.height );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.texture.length = 0;\n\n\t\tfor ( let i = 0, il = source.texture.length; i < il; i ++ ) {\n\n\t\t\tthis.texture[ i ] = source.texture[ i ].clone();\n\t\t\tthis.texture[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\tconst x = array[ i ];\n\t\t\tconst y = array[ i + 1 ];\n\t\t\tconst z = array[ i + 2 ];\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tlet minX = + Infinity;\n\t\tlet minY = + Infinity;\n\t\tlet minZ = + Infinity;\n\n\t\tlet maxX = - Infinity;\n\t\tlet maxY = - Infinity;\n\t\tlet maxZ = - Infinity;\n\n\t\tfor ( let i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\tconst x = attribute.getX( i );\n\t\t\tconst y = attribute.getY( i );\n\t\t\tconst z = attribute.getZ( i );\n\n\t\t\tif ( x < minX ) minX = x;\n\t\t\tif ( y < minY ) minY = y;\n\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\tif ( x > maxX ) maxX = x;\n\t\t\tif ( y > maxY ) maxY = y;\n\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t}\n\n\t\tthis.min.set( minX, minY, minZ );\n\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tif ( precise && geometry.attributes != undefined && geometry.attributes.position !== undefined ) {\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tfor ( let i = 0, l = position.count; i < l; i ++ ) {\n\n\t\t\t\t\t_vector$b.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t}\n\n\t\t\t\t_box$3.copy( geometry.boundingBox );\n\t\t\t\t_box$3.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$3 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$2.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$2 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$2, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$3 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$2.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor() {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, x,\n\t\t\t0, 1, 0, y,\n\t\t\t0, 0, 1, z,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$2.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$2.elements[ 0 ] *= invSX;\n\t\t_m1$2.elements[ 1 ] *= invSX;\n\t\t_m1$2.elements[ 2 ] *= invSX;\n\n\t\t_m1$2.elements[ 4 ] *= invSY;\n\t\t_m1$2.elements[ 5 ] *= invSY;\n\t\t_m1$2.elements[ 6 ] *= invSY;\n\n\t\t_m1$2.elements[ 8 ] *= invSZ;\n\t\t_m1$2.elements[ 9 ] *= invSZ;\n\t\t_m1$2.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$2 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\t\tconst c = - ( far + near ) / ( far - near );\n\t\tconst d = - 2 * far * near / ( far - near );\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\t\tconst z = ( far + near ) * p;\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$1.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$1, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$1.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$1.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$1 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$1.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$1 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\tobject.parent.remove( object );\n\n\t\t\t}\n\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\tconst object = this.children[ i ];\n\n\t\t\tobject.parent = null;\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t}\n\n\t\tthis.children.length = 0;\n\n\t\treturn this;\n\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$1.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$1.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$1 );\n\n\t\tthis.add( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value ) {\n\n\t\tlet result = [];\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst childResult = this.children[ i ].getObjectsByProperty( name, value );\n\n\t\t\tif ( childResult.length > 0 ) {\n\n\t\t\t\tresult = result.concat( childResult );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// update children\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tif ( child.matrixWorldAutoUpdate === true || force === true ) {\n\n\t\t\t\tchild.updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.parent === null ) {\n\n\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t} else {\n\n\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t}\n\n\t\t// update children\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tif ( child.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$1 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$1.subVectors( a, b );\n\t\ttarget.cross( _v0$1 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$1.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$1.dot( _v0$1 );\n\t\tconst dot01 = _v0$1.dot( _v1$3 );\n\t\tconst dot02 = _v0$1.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\t// arbitrary location outside of triangle?\n\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\tthis.getBarycoord( point, a, b, c, _v3$1 );\n\n\t\treturn ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );\n\n\t}\n\n\tstatic getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) {\n\n\t\tthis.getBarycoord( point, p1, p2, p3, _v3$1 );\n\n\t\ttarget.set( 0, 0 );\n\t\ttarget.addScaledVector( uv1, _v3$1.x );\n\t\ttarget.addScaledVector( uv2, _v3$1.y );\n\t\ttarget.addScaledVector( uv3, _v3$1.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$1.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$1.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$1.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetUV( point, uv1, uv2, uv3, target ) {\n\n\t\treturn Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nlet materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Material: \\'' + key + '\\' parameter is undefined.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': \\'' + key + '\\' is not a property of this material.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\tdata.depthFunc = this.depthFunc;\n\t\tdata.depthTest = this.depthTest;\n\t\tdata.depthWrite = this.depthWrite;\n\t\tdata.colorWrite = this.colorWrite;\n\n\t\tdata.stencilWrite = this.stencilWrite;\n\t\tdata.stencilWriteMask = this.stencilWriteMask;\n\t\tdata.stencilFunc = this.stencilFunc;\n\t\tdata.stencilRef = this.stencilRef;\n\t\tdata.stencilFuncMask = this.stencilFuncMask;\n\t\tdata.stencilFail = this.stencilFail;\n\t\tdata.stencilZFail = this.stencilZFail;\n\t\tdata.stencilZPass = this.stencilZPass;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = this.forceSinglePass;\n\n\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tset( value ) {\n\n\t\tif ( value && value.isColor ) {\n\n\t\t\tthis.copy( value );\n\n\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\tthis.setHex( value );\n\n\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\tthis.setStyle( value );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\tconst h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\tconst s = parseFloat( color[ 2 ] ) / 100;\n\t\t\t\t\t\tconst l = parseFloat( color[ 3 ] ) / 100;\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL( h, s, l, colorSpace );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\t\t\treturn this;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn clamp( _color.r * 255, 0, 255 ) << 16 ^ clamp( _color.g * 255, 0, 255 ) << 8 ^ clamp( _color.b * 255, 0, 255 ) << 0;\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${( r * 255 ) | 0},${( g * 255 ) | 0},${( b * 255 ) | 0})`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\t_hslA.h += h; _hslA.s += s; _hslA.l += l;\n\n\t\tthis.setHSL( _hslA.h, _hslA.s, _hslA.l );\n\n\t\treturn this;\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = new Color();\n\nColor.NAMES = _colorKeywords;\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\t\tif ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;\n\n\t\treturn data;\n\n\t}\n\n\t// @deprecated\n\n\tcopyColorsArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyColorsArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector2sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector2sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector3sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector3sArray() was removed in r144.' );\n\n\t}\n\n\tcopyVector4sArray() {\n\n\t\tconsole.error( 'THREE.BufferAttribute: copyVector4sArray() was removed in r144.' );\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float64BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$1 = 0;\n\nconst _m1 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$1 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$1.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$1.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$1.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$1.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$1.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$1.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$1.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$1.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst indices = index.array;\n\t\tconst positions = attributes.position.array;\n\t\tconst normals = attributes.normal.array;\n\t\tconst uvs = attributes.uv.array;\n\n\t\tconst nVertices = positions.length / 3;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );\n\n\t\t}\n\n\t\tconst tangents = this.getAttribute( 'tangent' ).array;\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < nVertices; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromArray( positions, a * 3 );\n\t\t\tvB.fromArray( positions, b * 3 );\n\t\t\tvC.fromArray( positions, c * 3 );\n\n\t\t\tuvA.fromArray( uvs, a * 2 );\n\t\t\tuvB.fromArray( uvs, b * 2 );\n\t\t\tuvC.fromArray( uvs, c * 2 );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: indices.length\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindices[ j + 0 ],\n\t\t\t\t\tindices[ j + 1 ],\n\t\t\t\t\tindices[ j + 2 ]\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromArray( normals, v * 3 );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangents[ v * 4 ] = tmp.x;\n\t\t\ttangents[ v * 4 + 1 ] = tmp.y;\n\t\t\ttangents[ v * 4 + 2 ] = tmp.z;\n\t\t\ttangents[ v * 4 + 3 ] = w;\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( indices[ j + 0 ] );\n\t\t\t\thandleVertex( indices[ j + 1 ] );\n\t\t\t\thandleVertex( indices[ j + 2 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\t// @deprecated since r144\n\n\tmerge() {\n\n\t\tconsole.error( 'THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeBufferGeometries() instead.' );\n\t\treturn this;\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tthis.boneTransform( index, target );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$3.copy( geometry.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\t_ray$2.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$3.containsPoint( _ray$2.origin ) === false ) {\n\n\t\t\tif ( _ray$2.intersectSphere( _sphere$3, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$2.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t//\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// Check boundingBox before continuing\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\tlet intersection;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv2 = geometry.attributes.uv2;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv2, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, material, raycaster, _ray$2, uv, uv2, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( object, material, raycaster, ray, uv, uv2, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv2 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv2, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv2, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv2, c );\n\n\t\t\tintersection.uv2 = Triangle.getUV( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tif ( renderer.getRenderTarget() === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputEncoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n\n\t}\n\n\treturn LinearSRGBColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tcameraPX.up.set( 0, 1, 0 );\n\t\tcameraPX.lookAt( 1, 0, 0 );\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tcameraNX.up.set( 0, 1, 0 );\n\t\tcameraNX.lookAt( - 1, 0, 0 );\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\tcameraPY.lookAt( 0, 1, 0 );\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tcameraNY.up.set( 0, 0, 1 );\n\t\tcameraNY.lookAt( 0, - 1, 0 );\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\tcameraPZ.lookAt( 0, 0, 1 );\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst renderTarget = this.renderTarget;\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst currentToneMapping = renderer.toneMapping;\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0 );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1 );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2 );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3 );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4 );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5 );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t\trenderer.toneMapping = currentToneMapping;\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.encoding = texture.encoding;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$2.center.set( 0, 0, 0 );\n\t\t_sphere$2.radius = 0.7071067811865476;\n\t\t_sphere$2.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$2 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = 5126;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\ttype = 5131;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttype = 5123;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = 5122;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = 5125;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = 5124;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = 5120;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = 5121;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute.updateRange;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 ) {\n\n\t\t\t// Not using update ranges\n\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t} else {\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t}\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( V * D );\\n}\\n#ifdef USE_IRIDESCENCE\\n\\tvec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = mix( F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\t return vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat R21 = R12;\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = dFdx( surf_pos.xyz );\\n\\t\\tvec3 vSigmaY = dFdy( surf_pos.xyz );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat luminance( const in vec3 rgb ) {\\n\\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\\n\\treturn dot( weights, rgb );\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_v0 0.339\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_v1 0.276\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_v4 0.046\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_v5 0.016\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_v6 0.0038\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar encodings_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar encodings_pars_fragment = \"vec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t#if defined ( LEGACY_LIGHTS )\\n\\t\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t#else\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t}\\n\\t\\treturn distanceFalloff;\\n\\t#endif\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#if defined( USE_ENVMAP )\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\\n\\t#endif\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\nvec3 sheenSpecular = vec3( 0.0 );\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\\n\\t#else\\n\\t\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef USE_CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometry, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\t#endif\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform ivec2 morphTargetsTextureSize;\\n\\t\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t\\t}\\n\\t#else\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t\\t#else\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar output_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec2 packDepthToRG( in highp float v ) {\\n\\treturn packDepthToRGBA( v ).yx;\\n}\\nfloat unpackRGToDepth( const in highp vec2 v ) {\\n\\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\\n}\\nvec4 pack2HalfToRGBA( vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tuniform int boneTextureSize;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tfloat j = i * 4.0;\\n\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\ty = dy * ( y + 0.5 );\\n\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\treturn bone;\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, vec2 fullSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\t\\n\\t\\tvec2 lodFudge = pow( 1.95, lod ) / fullSize;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec2 fullSize = vec2( textureSize( sampler, 0 ) );\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), fullSize, floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), fullSize, ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\";\n\nvar uv_vertex = \"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\nvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\nvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\";\n\nvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tencodings_fragment: encodings_fragment,\n\tencodings_pars_fragment: encodings_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_fragment: lightmap_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\toutput_fragment: output_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tuv2_pars_fragment: uv2_pars_fragment,\n\tuv2_pars_vertex: uv2_pars_vertex,\n\tuv2_vertex: uv2_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tuv2Transform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction render( renderList, scene ) {\n\n\t\tlet forceClear = false;\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\t// Ignore background in AR\n\t\t// TODO: Reconsider this.\n\n\t\tconst xr = renderer.xr;\n\t\tconst session = xr.getSession && xr.getSession();\n\n\t\tif ( session && session.environmentBlendMode === 'additive' ) {\n\n\t\t\tbackground = null;\n\n\t\t}\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.toneMapped = ( background.encoding === sRGBEncoding ) ? false : true;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ( background.encoding === sRGBEncoding ) ? false : true;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, extensions, attributes, capabilities ) {\n\n\tconst maxVertexAttributes = gl.getParameter( 34921 );\n\n\tconst extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );\n\tconst vaoAvailable = capabilities.isWebGL2 || extension !== null;\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tif ( vaoAvailable ) {\n\n\t\t\tconst state = getBindingState( geometry, program, material );\n\n\t\t\tif ( currentState !== state ) {\n\n\t\t\t\tcurrentState = state;\n\t\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t\t}\n\n\t\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\t} else {\n\n\t\t\tconst wireframe = ( material.wireframe === true );\n\n\t\t\tif ( currentState.geometry !== geometry.id ||\n\t\t\t\tcurrentState.program !== program.id ||\n\t\t\t\tcurrentState.wireframe !== wireframe ) {\n\n\t\t\t\tcurrentState.geometry = geometry.id;\n\t\t\t\tcurrentState.program = program.id;\n\t\t\t\tcurrentState.wireframe = wireframe;\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, 34963 );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( 34963, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.createVertexArray();\n\n\t\treturn extension.createVertexArrayOES();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );\n\n\t\treturn extension.bindVertexArrayOES( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\tif ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );\n\n\t\treturn extension.deleteVertexArrayOES( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tconst extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\textension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset ) {\n\n\t\tif ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tif ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {\n\n\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;\n\n\t\t}\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( 34962, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawArraysInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawArraysInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tconst isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( 34930 );\n\tconst maxVertexTextures = gl.getParameter( 35660 );\n\tconst maxTextureSize = gl.getParameter( 3379 );\n\tconst maxCubemapSize = gl.getParameter( 34076 );\n\n\tconst maxAttributes = gl.getParameter( 34921 );\n\tconst maxVertexUniforms = gl.getParameter( 36347 );\n\tconst maxVaryings = gl.getParameter( 36348 );\n\tconst maxFragmentUniforms = gl.getParameter( 36349 );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\tconst floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );\n\tconst floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\tconst maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0;\n\n\treturn {\n\n\t\tisWebGL2: isWebGL2,\n\n\t\tdrawBuffers: drawBuffers,\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\tfloatVertexTextures: floatVertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height / 2 );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tencoding: LinearEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {\n\n\t\t\t\t\ttexture.needsPMREMUpdate = false;\n\n\t\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cubeUVmaps.has( texture ) ) {\n\n\t\t\t\t\t\treturn cubeUVmaps.get( texture ).texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\tconst renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function ( capabilities ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\n\t\t\t} else {\n\n\t\t\t\tgetExtension( 'WEBGL_depth_texture' );\n\t\t\t\tgetExtension( 'OES_texture_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float' );\n\t\t\t\tgetExtension( 'OES_texture_half_float_linear' );\n\t\t\t\tgetExtension( 'OES_standard_derivatives' );\n\t\t\t\tgetExtension( 'OES_element_index_uint' );\n\t\t\t\tgetExtension( 'OES_vertex_array_object' );\n\t\t\t\tgetExtension( 'ANGLE_instanced_arrays' );\n\n\t\t\t}\n\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], 34962 );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tlet extension, methodName;\n\n\t\tif ( isWebGL2 ) {\n\n\t\t\textension = gl;\n\t\t\tmethodName = 'drawElementsInstanced';\n\n\t\t} else {\n\n\t\t\textension = extensions.get( 'ANGLE_instanced_arrays' );\n\t\t\tmethodName = 'drawElementsInstancedANGLE';\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\textension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 4:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase 3:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase 0:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.frame ++;\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction numericalSort( a, b ) {\n\n\treturn a[ 0 ] - b[ 0 ];\n\n}\n\nfunction absNumericalSort( a, b ) {\n\n\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst influencesList = {};\n\tconst morphInfluences = new Float32Array( 8 );\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tconst workInfluences = [];\n\n\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\tworkInfluences[ i ] = [ i, 0 ];\n\n\t}\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tif ( capabilities.isWebGL2 === true ) {\n\n\t\t\t// instead of using attributes, the WebGL 2 code path encodes morph targets\n\t\t\t// into an array of data textures. Each layer represents a single morph target.\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tlet entry = morphTextures.get( geometry );\n\n\t\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\t\tlet vertexDataCount = 0;\n\n\t\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\t\tlet height = 1;\n\n\t\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t\t}\n\n\t\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\t\ttexture.type = FloatType;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t// fill buffer\n\n\t\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tentry = {\n\t\t\t\t\tcount: morphTargetsCount,\n\t\t\t\t\ttexture: texture,\n\t\t\t\t\tsize: new Vector2( width, height )\n\t\t\t\t};\n\n\t\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\t\tfunction disposeTexture() {\n\n\t\t\t\t\ttexture.dispose();\n\n\t\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\n\t\t} else {\n\n\t\t\t// When object doesn't have morph target influences defined, we treat it as a 0-length array\n\t\t\t// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences\n\n\t\t\tconst length = objectInfluences === undefined ? 0 : objectInfluences.length;\n\n\t\t\tlet influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined || influences.length !== length ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\t\tconst influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tif ( i < length && influences[ i ][ 1 ] ) {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = influences[ i ][ 0 ];\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = influences[ i ][ 1 ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tworkInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;\n\t\t\t\t\tworkInfluences[ i ][ 1 ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tworkInfluences.sort( numericalSort );\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position;\n\t\t\tconst morphNormals = geometry.morphAttributes.normal;\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\t\tconst influence = workInfluences[ i ];\n\t\t\t\tconst index = influence[ 0 ];\n\t\t\t\tconst value = influence[ 1 ];\n\n\t\t\t\tif ( index !== Number.MAX_SAFE_INTEGER && value ) {\n\n\t\t\t\t\tif ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {\n\n\t\t\t\t\t\tgeometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\tmorphInfluencesSum += value;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphTarget' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {\n\n\t\t\t\t\t\tgeometry.deleteAttribute( 'morphNormal' + i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// GLSL shader uses formula baseinfluence * base + sum(target * influence)\n\t\t\t// This allows us to switch between absolute morphs and relative morphs without changing shader code\n\t\t\t// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tattributes.update( object.instanceMatrix, 34962 );\n\n\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\tattributes.update( object.instanceColor, 34962 );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, 35718 );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( encoding ) {\n\n\tswitch ( encoding ) {\n\n\t\tcase LinearEncoding:\n\t\t\treturn [ 'Linear', '( value )' ];\n\t\tcase sRGBEncoding:\n\t\t\treturn [ 'sRGB', '( value )' ];\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding );\n\t\t\treturn [ 'Linear', '( value )' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, 35713 );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\tconst components = getEncodingComponents( encoding );\n\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nfunction generateExtensions( parameters ) {\n\n\tconst chunks = [\n\t\t( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, 35721 );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === 35674 ) locationSize = 2;\n\t\tif ( info.type === 35675 ) locationSize = 3;\n\t\tif ( info.type === 35676 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nfunction includeReplacer( match, include ) {\n\n\tconst string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = 'precision ' + parameters.precision + ' float;\\nprecision ' + parameters.precision + ' int;';\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\n\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',\n\n\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t'\t#else',\n\n\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t'\t#endif',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tcustomExtensions,\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '',\n\t\t\t( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULARINTENSITYMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULARCOLORMAP' : '',\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEENCOLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEENROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.vertexTangents ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUvs ? '#define USE_UV' : '',\n\t\t\tparameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\t'precision mediump sampler2DArray;',\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, 35633, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\t// check for link errors\n\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tlet runnable = true;\n\t\tlet haveDiagnostics = true;\n\n\t\tif ( gl.getProgramParameter( program, 35714 ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\tconsole.error(\n\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, 35715 ) + '\\n\\n' +\n\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\tfragmentErrors\n\t\t\t);\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t}\n\n\t// Clean up\n\n\t// Crashes in iOS9 and iOS10. #18402\n\t// gl.detachShader( program, glVertexShader );\n\t// gl.detachShader( program, glFragmentShader );\n\n\tgl.deleteShader( glVertexShader );\n\tgl.deleteShader( glFragmentShader );\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst programs = [];\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst vertexTextures = capabilities.vertexTextures;\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst useAlphaTest = material.alphaTest > 0;\n\t\tconst useClearcoat = material.clearcoat > 0;\n\t\tconst useIridescence = material.iridescence > 0;\n\n\t\tconst parameters = {\n\n\t\t\tisWebGL2: isWebGL2,\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderName: material.type,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tinstancing: object.isInstancedMesh === true,\n\t\t\tinstancingColor: object.isInstancedMesh === true && object.instanceColor !== null,\n\n\t\t\tsupportsVertexTextures: vertexTextures,\n\t\t\toutputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.encoding : LinearEncoding ),\n\t\t\tmap: !! material.map,\n\t\t\tmatcap: !! material.matcap,\n\t\t\tenvMap: !! envMap,\n\t\t\tenvMapMode: envMap && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\tlightMap: !! material.lightMap,\n\t\t\taoMap: !! material.aoMap,\n\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\tbumpMap: !! material.bumpMap,\n\t\t\tnormalMap: !! material.normalMap,\n\t\t\tobjectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap,\n\t\t\ttangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tdecodeVideoTexture: !! material.map && ( material.map.isVideoTexture === true ) && ( material.map.encoding === sRGBEncoding ),\n\n\t\t\tclearcoat: useClearcoat,\n\t\t\tclearcoatMap: useClearcoat && !! material.clearcoatMap,\n\t\t\tclearcoatRoughnessMap: useClearcoat && !! material.clearcoatRoughnessMap,\n\t\t\tclearcoatNormalMap: useClearcoat && !! material.clearcoatNormalMap,\n\n\t\t\tiridescence: useIridescence,\n\t\t\tiridescenceMap: useIridescence && !! material.iridescenceMap,\n\t\t\tiridescenceThicknessMap: useIridescence && !! material.iridescenceThicknessMap,\n\n\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\tspecularMap: !! material.specularMap,\n\t\t\tspecularIntensityMap: !! material.specularIntensityMap,\n\t\t\tspecularColorMap: !! material.specularColorMap,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending,\n\n\t\t\talphaMap: !! material.alphaMap,\n\t\t\talphaTest: useAlphaTest,\n\n\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\tsheen: material.sheen > 0,\n\t\t\tsheenColorMap: !! material.sheenColorMap,\n\t\t\tsheenRoughnessMap: !! material.sheenRoughnessMap,\n\n\t\t\ttransmission: material.transmission > 0,\n\t\t\ttransmissionMap: !! material.transmissionMap,\n\t\t\tthicknessMap: !! material.thicknessMap,\n\n\t\t\tcombine: material.combine,\n\n\t\t\tvertexTangents: ( !! material.normalMap && !! geometry.attributes.tangent ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\t\t\tvertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || !! material.displacementMap || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || !! material.sheenColorMap || !! material.sheenRoughnessMap,\n\t\t\tuvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.iridescenceMap || !! material.iridescenceThicknessMap || material.transmission > 0 || !! material.transmissionMap || !! material.thicknessMap || !! material.specularIntensityMap || !! material.specularColorMap || material.sheen > 0 || !! material.sheenColorMap || !! material.sheenRoughnessMap ) && !! material.displacementMap,\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: !! material.flatShading,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,\n\t\t\tuseLegacyLights: renderer.useLegacyLights,\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: !! material.depthPacking,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionDerivatives: material.extensions && material.extensions.derivatives,\n\t\t\textensionFragDepth: material.extensions && material.extensions.fragDepth,\n\t\t\textensionDrawBuffers: material.extensions && material.extensions.drawBuffers,\n\t\t\textensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD,\n\n\t\t\trendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ),\n\t\t\trendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ),\n\t\t\trendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputEncoding );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputEncoding );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.vertexUvs );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.isWebGL2 )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.map )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.lightMap )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.aoMap )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.emissiveMap )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.bumpMap )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.normalMap )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.objectSpaceNormalMap )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.tangentSpaceNormalMap )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.clearcoatMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.clearcoatRoughnessMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.clearcoatNormalMap )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.iridescenceMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.iridescenceThicknessMap )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.displacementMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.specularMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.roughnessMap )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.metalnessMap )\n\t\t\t_programLayers.enable( 24 );\n\t\tif ( parameters.gradientMap )\n\t\t\t_programLayers.enable( 25 );\n\t\tif ( parameters.alphaMap )\n\t\t\t_programLayers.enable( 26 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 27 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 28 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 29 );\n\t\tif ( parameters.vertexUvs )\n\t\t\t_programLayers.enable( 30 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 31 );\n\t\tif ( parameters.uvsVertexOnly )\n\t\t\t_programLayers.enable( 32 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.useLegacyLights )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.specularIntensityMap )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.specularColorMap )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.transmissionMap )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.thicknessMap )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.sheenColorMap )\n\t\t\t_programLayers.enable( 21 );\n\t\tif ( parameters.sheenRoughnessMap )\n\t\t\t_programLayers.enable( 22 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 23 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 24 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions, capabilities ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights, useLegacyLights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\t// artist-friendly light intensity scaling factor\n\t\tconst scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity * scaleFactor;\n\t\t\t\tg += color.g * intensity * scaleFactor;\n\t\t\t\tb += color.b * intensity * scaleFactor;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t// WebGL 2\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\t// WebGL 1\n\n\t\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t\t} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {\n\n\t\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions, capabilities ) {\n\n\tconst lights = new WebGLLights( extensions, capabilities );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init() {\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights( useLegacyLights ) {\n\n\t\tlights.setup( lightsArray, useLegacyLights );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tlights: lights\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions, capabilities ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions, capabilities );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( _renderer, _objects, _capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = _capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = _renderer.getRenderTarget();\n\t\tconst activeCubeFace = _renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = _renderer.getActiveMipmapLevel();\n\n\t\tconst _state = _renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\t_renderer.setRenderTarget( shadow.map );\n\t\t\t_renderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\tscope.needsUpdate = false;\n\n\t\t_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = _objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.mapPass );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\t_renderer.setRenderTarget( shadow.map );\n\t\t_renderer.clear();\n\t\t_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, shadowCameraNear, shadowCameraFar, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tresult.referencePosition.setFromMatrixPosition( light.matrixWorld );\n\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = _objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, shadowCamera.near, shadowCamera.far, type );\n\n\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( 2929 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( 2929 );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 512 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 519 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 513 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 514 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 518 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 516 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( 517 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( 515 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( 2960 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( 2960 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( 35661 );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( 7938 );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( 3088 );\n\tconst viewportParam = gl.getParameter( 2978 );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, 10241, 9728 );\n\t\tgl.texParameteri( type, 10240, 9728 );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tgl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 );\n\temptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( 2929 );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( 2884 );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t// 36009 is equivalent to 36160\n\n\t\t\t\tif ( target === 36009 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36160 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t\tif ( target === 36160 ) {\n\n\t\t\t\t\tcurrentBoundFramebuffers[ 36009 ] = framebuffer;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tdrawBuffers[ i ] = 36064 + i;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( drawBuffers[ 0 ] !== 36064 ) {\n\n\t\t\t\t\tdrawBuffers[ 0 ] = 36064;\n\n\t\t\t\t\tneedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== 1029 ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = 1029;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t\t} else {\n\n\t\t\t\textensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: 32774,\n\t\t[ SubtractEquation ]: 32778,\n\t\t[ ReverseSubtractEquation ]: 32779\n\t};\n\n\tif ( isWebGL2 ) {\n\n\t\tequationToGL[ MinEquation ] = 32775;\n\t\tequationToGL[ MaxEquation ] = 32776;\n\n\t} else {\n\n\t\tconst extension = extensions.get( 'EXT_blend_minmax' );\n\n\t\tif ( extension !== null ) {\n\n\t\t\tequationToGL[ MinEquation ] = extension.MIN_EXT;\n\t\t\tequationToGL[ MaxEquation ] = extension.MAX_EXT;\n\n\t\t}\n\n\t}\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: 0,\n\t\t[ OneFactor ]: 1,\n\t\t[ SrcColorFactor ]: 768,\n\t\t[ SrcAlphaFactor ]: 770,\n\t\t[ SrcAlphaSaturateFactor ]: 776,\n\t\t[ DstColorFactor ]: 774,\n\t\t[ DstAlphaFactor ]: 772,\n\t\t[ OneMinusSrcColorFactor ]: 769,\n\t\t[ OneMinusSrcAlphaFactor ]: 771,\n\t\t[ OneMinusDstColorFactor ]: 775,\n\t\t[ OneMinusDstAlphaFactor ]: 773\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( 3042 );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( 3042 );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( 32774 );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 1, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 769, 0, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 768, 0, 770 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 770, 771, 1, 771 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 770, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( 0, 769, 0, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( 0, 768 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( 2884 )\n\t\t\t: enable( 2884 );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( 32926 )\n\t\t\t: disable( 32926 );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( 2304 );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( 2305 );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( 2884 );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( 1029 );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( 1028 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( 1032 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 2884 );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( 32823 );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( 32823 );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( 3089 );\n\n\t\t} else {\n\n\t\t\tdisable( 3089 );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = 33984 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( 3042 );\n\t\tgl.disable( 2884 );\n\t\tgl.disable( 2929 );\n\t\tgl.disable( 32823 );\n\t\tgl.disable( 3089 );\n\t\tgl.disable( 2960 );\n\t\tgl.disable( 32926 );\n\n\t\tgl.blendEquation( 32774 );\n\t\tgl.blendFunc( 1, 0 );\n\t\tgl.blendFuncSeparate( 1, 0, 1, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( 513 );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( 519, 0, 0xffffffff );\n\t\tgl.stencilOp( 7680, 7680, 7680 );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( 1029 );\n\t\tgl.frontFace( 2305 );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( 33984 );\n\n\t\tgl.bindFramebuffer( 36160, null );\n\n\t\tif ( isWebGL2 === true ) {\n\n\t\t\tgl.bindFramebuffer( 36009, null );\n\t\t\tgl.bindFramebuffer( 36008, null );\n\n\t\t}\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\tconst maxTextures = capabilities.maxTextures;\n\tconst maxCubemapSize = capabilities.maxCubemapSize;\n\tconst maxTextureSize = capabilities.maxTextureSize;\n\tconst maxSamples = capabilities.maxSamples;\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( image.width, image.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 || needsPowerOfTwo === true ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\t\tconst floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;\n\n\t\t\t\tconst width = floor( scale * image.width );\n\t\t\t\tconst height = floor( scale * image.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction isPowerOfTwo$1( image ) {\n\n\t\treturn isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );\n\n\t}\n\n\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\tif ( isWebGL2 ) return false;\n\n\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture, supportsMips ) {\n\n\t\treturn texture.generateMipmaps && supportsMips &&\n\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, encoding, forceLinearEncoding = false ) {\n\n\t\tif ( isWebGL2 === false ) return glFormat;\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === 6403 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33326;\n\t\t\tif ( glType === 5131 ) internalFormat = 33325;\n\t\t\tif ( glType === 5121 ) internalFormat = 33321;\n\n\t\t}\n\n\t\tif ( glFormat === 33319 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 33328;\n\t\t\tif ( glType === 5131 ) internalFormat = 33327;\n\t\t\tif ( glType === 5121 ) internalFormat = 33323;\n\n\t\t}\n\n\t\tif ( glFormat === 6408 ) {\n\n\t\t\tif ( glType === 5126 ) internalFormat = 34836;\n\t\t\tif ( glType === 5131 ) internalFormat = 34842;\n\t\t\tif ( glType === 5121 ) internalFormat = ( encoding === sRGBEncoding && forceLinearEncoding === false ) ? 35907 : 32856;\n\t\t\tif ( glType === 32819 ) internalFormat = 32854;\n\t\t\tif ( glType === 32820 ) internalFormat = 32855;\n\n\t\t}\n\n\t\tif ( internalFormat === 33325 || internalFormat === 33326 ||\n\t\t\tinternalFormat === 33327 || internalFormat === 33328 ||\n\t\t\tinternalFormat === 34842 || internalFormat === 34836 ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image, supportsMips ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t// Fallback filters for non-power-of-2 textures\n\n\tfunction filterFallback( f ) {\n\n\t\tif ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {\n\n\t\t\treturn 9728;\n\n\t\t}\n\n\t\treturn 9729;\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = texture.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachmentProperties = properties.get( texture[ i ] );\n\n\t\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\t\tinfo.memory.textures --;\n\n\t\t\t\t}\n\n\t\t\t\tproperties.remove( texture[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.encoding );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( 3553, textureProperties.__webglTexture, 33984 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( 35866, textureProperties.__webglTexture, 33984 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( 32879, textureProperties.__webglTexture, 33984 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture, 33984 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: 10497,\n\t\t[ ClampToEdgeWrapping ]: 33071,\n\t\t[ MirroredRepeatWrapping ]: 33648\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: 9728,\n\t\t[ NearestMipmapNearestFilter ]: 9984,\n\t\t[ NearestMipmapLinearFilter ]: 9986,\n\n\t\t[ LinearFilter ]: 9729,\n\t\t[ LinearMipmapNearestFilter ]: 9985,\n\t\t[ LinearMipmapLinearFilter ]: 9987\n\t};\n\n\tfunction setTextureParameters( textureType, texture, supportsMips ) {\n\n\t\tif ( supportsMips ) {\n\n\t\t\t_gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] );\n\t\t\t_gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] );\n\t\t\t_gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] );\n\n\t\t} else {\n\n\t\t\t_gl.texParameteri( textureType, 10242, 33071 );\n\t\t\t_gl.texParameteri( textureType, 10243, 33071 );\n\n\t\t\tif ( textureType === 32879 || textureType === 35866 ) {\n\n\t\t\t\t_gl.texParameteri( textureType, 32882, 33071 );\n\n\t\t\t}\n\n\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );\n\n\t\t\t}\n\n\t\t\t_gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) );\n\t\t\t_gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) );\n\n\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2\n\t\t\tif ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = 3553;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = 35866;\n\t\tif ( texture.isData3DTexture ) textureType = 32879;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, 33984 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\t\tconst needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;\n\t\t\tlet image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst supportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding );\n\n\t\t\tlet glType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture, supportsMips );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tglInternalFormat = 6402;\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t} else if ( texture.type === UnsignedInt248Type ) {\n\n\t\t\t\t\t\tglInternalFormat = 35056;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tglInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\t\tconsole.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// validation checks for WebGL 1\n\n\t\t\t\tif ( texture.format === DepthFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedIntType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) {\n\n\t\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tglInternalFormat = 34041;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( 3553, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( 35866, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( 35866, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( 35866, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage3D( 35866, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( 35866, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( 35866, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( 35866, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( 32879, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.texSubImage3D( 32879, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && supportsMips ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 3553, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( 3553, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstate.texSubImage2D( 3553, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( 34067, textureProperties.__webglTexture, 33984 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( 33984 + slot );\n\n\t\t\t_gl.pixelStorei( 37440, texture.flipY );\n\t\t\t_gl.pixelStorei( 37441, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( 3317, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( 37443, 0 );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tsupportsMips = isPowerOfTwo$1( image ) || isWebGL2,\n\t\t\t\tglFormat = utils.convert( texture.format, texture.encoding ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\n\t\t\tconst useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tlet levels = getMipLevels( texture, image, supportsMips );\n\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( 34067, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( 34069 + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tstate.texStorage2D( 34067, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( 34069 + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( 34067 );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tif ( textureTarget === 32879 || textureTarget === 35866 ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === 3553 || ( textureTarget >= 34069 && textureTarget <= 34074 ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( 36161, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\tlet glInternalFormat = 33189;\n\n\t\t\tif ( isMultisample || useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tconst depthTexture = renderTarget.depthTexture;\n\n\t\t\t\tif ( depthTexture && depthTexture.isDepthTexture ) {\n\n\t\t\t\t\tif ( depthTexture.type === FloatType ) {\n\n\t\t\t\t\t\tglInternalFormat = 36012;\n\n\t\t\t\t\t} else if ( depthTexture.type === UnsignedIntType ) {\n\n\t\t\t\t\t\tglInternalFormat = 33190;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer );\n\n\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, 35056, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\n\t\t\t_gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, 36096, 3553, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( 36160, 33306, 3553, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( 36160, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, 36064, 3553 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tif ( renderTarget.isWebGLMultipleRenderTargets !== true ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tif ( capabilities.drawBuffers ) {\n\n\t\t\t\t\tconst textures = renderTarget.texture;\n\n\t\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = isMultipleRenderTargets ? texture : [ texture ];\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.encoding );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.encoding, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( 36161, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( 36160, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( 34067, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( 34067, texture, supportsMips );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, 36064, 34069 + i );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( 34067 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tconst textures = renderTarget.texture;\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( 3553, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( 3553, attachment, supportsMips );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, 36064 + i, 3553 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {\n\n\t\t\t\t\tgenerateMipmap( 3553 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = 3553;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tif ( isWebGL2 ) {\n\n\t\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? 32879 : 35866;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture, supportsMips );\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, 36064, glTextureType );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;\n\n\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\tconst textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];\n\t\t\tconst width = renderTarget.width;\n\t\t\tconst height = renderTarget.height;\n\t\t\tlet mask = 16384;\n\t\t\tconst invalidationArray = [];\n\t\t\tconst depthStyle = renderTarget.stencilBuffer ? 33306 : 36096;\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\tconst isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );\n\n\t\t\t// If MRT we need to remove FBO attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, null );\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064 + i, 3553, null, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer );\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tinvalidationArray.push( 36064 + i );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\tinvalidationArray.push( depthStyle );\n\n\t\t\t\t}\n\n\t\t\t\tconst ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;\n\n\t\t\t\tif ( ignoreDepthValues === false ) {\n\n\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= 256;\n\t\t\t\t\tif ( renderTarget.stencilBuffer ) mask |= 1024;\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36008, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ignoreDepthValues === true ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( 36008, [ depthStyle ] );\n\t\t\t\t\t_gl.invalidateFramebuffer( 36009, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064, 3553, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 );\n\n\t\t\t\tif ( supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\t_gl.invalidateFramebuffer( 36008, invalidationArray );\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36008, null );\n\t\t\tstate.bindFramebuffer( 36009, null );\n\n\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t_gl.framebufferRenderbuffer( 36160, 36064 + i, 36161, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\tstate.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t_gl.framebufferTexture2D( 36009, 36064 + i, 3553, webglTexture, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.bindFramebuffer( 36009, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst encoding = texture.encoding;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true || texture.format === _SRGBAFormat ) return image;\n\n\t\tif ( encoding !== LinearEncoding ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\tif ( isWebGL2 === false ) {\n\n\t\t\t\t\t// in WebGL 1, try to use EXT_sRGB extension and unsized formats\n\n\t\t\t\t\tif ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {\n\n\t\t\t\t\t\ttexture.format = _SRGBAFormat;\n\n\t\t\t\t\t\t// it's not possible to generate mips in WebGL 1 with this extension\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// slow fallback (CPU decode)\n\n\t\t\t\t\t\timage = ImageUtils.sRGBToLinear( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture encoding:', encoding );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions, capabilities ) {\n\n\tconst isWebGL2 = capabilities.isWebGL2;\n\n\tfunction convert( p, encoding = null ) {\n\n\t\tlet extension;\n\n\t\tif ( p === UnsignedByteType ) return 5121;\n\t\tif ( p === UnsignedShort4444Type ) return 32819;\n\t\tif ( p === UnsignedShort5551Type ) return 32820;\n\n\t\tif ( p === ByteType ) return 5120;\n\t\tif ( p === ShortType ) return 5122;\n\t\tif ( p === UnsignedShortType ) return 5123;\n\t\tif ( p === IntType ) return 5124;\n\t\tif ( p === UnsignedIntType ) return 5125;\n\t\tif ( p === FloatType ) return 5126;\n\n\t\tif ( p === HalfFloatType ) {\n\n\t\t\tif ( isWebGL2 ) return 5131;\n\n\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.HALF_FLOAT_OES;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( p === AlphaFormat ) return 6406;\n\t\tif ( p === RGBAFormat ) return 6408;\n\t\tif ( p === LuminanceFormat ) return 6409;\n\t\tif ( p === LuminanceAlphaFormat ) return 6410;\n\t\tif ( p === DepthFormat ) return 6402;\n\t\tif ( p === DepthStencilFormat ) return 34041;\n\n\t\t// WebGL 1 sRGB fallback\n\n\t\tif ( p === _SRGBAFormat ) {\n\n\t\t\textension = extensions.get( 'EXT_sRGB' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.SRGB_ALPHA_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return 6403;\n\t\tif ( p === RedIntegerFormat ) return 36244;\n\t\tif ( p === RGFormat ) return 33319;\n\t\tif ( p === RGIntegerFormat ) return 33320;\n\t\tif ( p === RGBAIntegerFormat ) return 36249;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( encoding === sRGBEncoding ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC1\n\n\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC2\n\n\t\tif ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC2_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( encoding === sRGBEncoding ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\tif ( isWebGL2 ) return 34042;\n\n\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\treturn extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\t\tconst attributes = gl.getContextAttributes();\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst planes = new Set();\n\t\tconst planesLastChangedTimes = new Map();\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraVR = new ArrayCamera();\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tif ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,\n\t\t\t\t\t\talpha: attributes.alpha,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? 35056 : 33190;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: 32856,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tencoding: renderer.outputEncoding,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tconst renderTargetProperties = renderer.properties.get( newRenderTarget );\n\t\t\t\t\trenderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tcameraVR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraVR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraVR.near,\n\t\t\t\t\tdepthFar: cameraVR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraVR.near;\n\t\t\t\t_currentDepthFar = cameraVR.far;\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraVR.cameras;\n\n\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\tcameraVR.matrixWorld.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );\n\n\t\t\t// update user camera and its children\n\n\t\t\tcamera.matrix.copy( cameraVR.matrix );\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\n\t\t\tconst children = camera.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraVR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getPlanes = function () {\n\n\t\t\treturn planes;\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraVRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraVR's camera list\n\n\t\t\t\tif ( views.length !== cameraVR.cameras.length ) {\n\n\t\t\t\t\tcameraVR.cameras.length = 0;\n\t\t\t\t\tcameraVRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraVRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraVR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame.detectedPlanes } );\n\n\t\t\t\tlet planesToRemove = null;\n\n\t\t\t\tfor ( const plane of planes ) {\n\n\t\t\t\t\tif ( ! frame.detectedPlanes.has( plane ) ) {\n\n\t\t\t\t\t\tif ( planesToRemove === null ) {\n\n\t\t\t\t\t\t\tplanesToRemove = [];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tplanesToRemove.push( plane );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( planesToRemove !== null ) {\n\n\t\t\t\t\tfor ( const plane of planesToRemove ) {\n\n\t\t\t\t\t\tplanes.delete( plane );\n\t\t\t\t\t\tplanesLastChangedTimes.delete( plane );\n\t\t\t\t\t\tscope.dispatchEvent( { type: 'planeremoved', data: plane } );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( const plane of frame.detectedPlanes ) {\n\n\t\t\t\t\tif ( ! planes.has( plane ) ) {\n\n\t\t\t\t\t\tplanes.add( plane );\n\t\t\t\t\t\tplanesLastChangedTimes.set( plane, frame.lastChangedTime );\n\t\t\t\t\t\tscope.dispatchEvent( { type: 'planeadded', data: plane } );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst lastKnownTime = planesLastChangedTimes.get( plane );\n\n\t\t\t\t\t\tif ( plane.lastChangedTime > lastKnownTime ) {\n\n\t\t\t\t\t\t\tplanesLastChangedTimes.set( plane, plane.lastChangedTime );\n\t\t\t\t\t\t\tscope.dispatchEvent( { type: 'planechanged', data: plane } );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\n\t\t\t// artist-friendly light intensity scaling factor\n\t\t\tconst scaleFactor = ( renderer.useLegacyLights === true ) ? Math.PI : 1;\n\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. specular map\n\t\t// 3. displacementMap map\n\t\t// 4. normal map\n\t\t// 5. bump map\n\t\t// 6. roughnessMap map\n\t\t// 7. metalnessMap map\n\t\t// 8. alphaMap map\n\t\t// 9. emissiveMap map\n\t\t// 10. clearcoat map\n\t\t// 11. clearcoat normal map\n\t\t// 12. clearcoat roughnessMap map\n\t\t// 13. iridescence map\n\t\t// 14. iridescence thickness map\n\t\t// 15. specular intensity map\n\t\t// 16. specular tint map\n\t\t// 17. transmission map\n\t\t// 18. thickness map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.specularMap ) {\n\n\t\t\tuvScaleMap = material.specularMap;\n\n\t\t} else if ( material.displacementMap ) {\n\n\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t} else if ( material.normalMap ) {\n\n\t\t\tuvScaleMap = material.normalMap;\n\n\t\t} else if ( material.bumpMap ) {\n\n\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t} else if ( material.roughnessMap ) {\n\n\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t} else if ( material.metalnessMap ) {\n\n\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t} else if ( material.emissiveMap ) {\n\n\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t} else if ( material.clearcoatMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatMap;\n\n\t\t} else if ( material.clearcoatNormalMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatNormalMap;\n\n\t\t} else if ( material.clearcoatRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.clearcoatRoughnessMap;\n\n\t\t} else if ( material.iridescenceMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceMap;\n\n\t\t} else if ( material.iridescenceThicknessMap ) {\n\n\t\t\tuvScaleMap = material.iridescenceThicknessMap;\n\n\t\t} else if ( material.specularIntensityMap ) {\n\n\t\t\tuvScaleMap = material.specularIntensityMap;\n\n\t\t} else if ( material.specularColorMap ) {\n\n\t\t\tuvScaleMap = material.specularColorMap;\n\n\t\t} else if ( material.transmissionMap ) {\n\n\t\t\tuvScaleMap = material.transmissionMap;\n\n\t\t} else if ( material.thicknessMap ) {\n\n\t\t\tuvScaleMap = material.thicknessMap;\n\n\t\t} else if ( material.sheenColorMap ) {\n\n\t\t\tuvScaleMap = material.sheenColorMap;\n\n\t\t} else if ( material.sheenRoughnessMap ) {\n\n\t\t\tuvScaleMap = material.sheenRoughnessMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities for uv2\n\t\t// 1. ao map\n\t\t// 2. light map\n\n\t\tlet uv2ScaleMap;\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuv2ScaleMap = material.aoMap;\n\n\t\t} else if ( material.lightMap ) {\n\n\t\t\tuv2ScaleMap = material.lightMap;\n\n\t\t}\n\n\t\tif ( uv2ScaleMap !== undefined ) {\n\n\t\t\t// backwards compatibility\n\t\t\tif ( uv2ScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\tuv2ScaleMap = uv2ScaleMap.texture;\n\n\t\t\t}\n\n\t\t\tif ( uv2ScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuv2ScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uv2Transform.value.copy( uv2ScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\t// uv repeat and offset setting priorities\n\t\t// 1. color map\n\t\t// 2. alpha map\n\n\t\tlet uvScaleMap;\n\n\t\tif ( material.map ) {\n\n\t\t\tuvScaleMap = material.map;\n\n\t\t} else if ( material.alphaMap ) {\n\n\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t}\n\n\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t}\n\n\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.roughness.value = material.roughness;\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t}\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t}\n\n\t\tconst envMap = properties.get( material ).envMap;\n\n\t\tif ( envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\tuniforms.farDistance.value = material.farDistance;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( 35375 ) : 0; // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( 35345, buffer );\n\t\tgl.bufferData( 35345, size, usage );\n\t\tgl.bindBuffer( 35345, null );\n\t\tgl.bindBufferBase( 35345, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( 35345, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\n\t\t\t// partly update the buffer if necessary\n\n\t\t\tif ( hasUniformChanged( uniform, i, cache ) === true ) {\n\n\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\tfor ( let i = 0; i < values.length; i ++ ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\tgl.bufferSubData( 35345, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\tuniform.__data[ 3 ] = value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\tuniform.__data[ 7 ] = value.elements[ 0 ];\n\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\tuniform.__data[ 11 ] = value.elements[ 0 ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgl.bufferSubData( 35345, offset, uniform.__data );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( 35345, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, cache ) {\n\n\t\tconst value = uniform.value;\n\n\t\tif ( cache[ index ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tcache[ index ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tconst values = Array.isArray( value ) ? value : [ value ];\n\n\t\t\t\tconst tempValues = [];\n\n\t\t\t\tfor ( let i = 0; i < values.length; i ++ ) {\n\n\t\t\t\t\ttempValues.push( values[ i ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tcache[ index ] = tempValues;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' ) {\n\n\t\t\t\tif ( cache[ index ] !== value ) {\n\n\t\t\t\t\tcache[ index ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst cachedObjects = Array.isArray( cache[ index ] ) ? cache[ index ] : [ cache[ index ] ];\n\t\t\t\tconst values = Array.isArray( value ) ? value : [ value ];\n\n\t\t\t\tfor ( let i = 0; i < cachedObjects.length; i ++ ) {\n\n\t\t\t\t\tconst cachedObject = cachedObjects[ i ];\n\n\t\t\t\t\tif ( cachedObject.equals( values[ i ] ) === false ) {\n\n\t\t\t\t\t\tcachedObject.copy( values[ i ] );\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\t\tlet chunkOffset = 0; // offset within a single chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniform = uniforms[ i ];\n\n\t\t\tconst infos = {\n\t\t\t\tboundary: 0, // bytes\n\t\t\t\tstorage: 0 // bytes\n\t\t\t};\n\n\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\tfor ( let j = 0, jl = values.length; j < jl; j ++ ) {\n\n\t\t\t\tconst value = values[ j ];\n\n\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\tinfos.boundary += info.boundary;\n\t\t\t\tinfos.storage += info.storage;\n\n\t\t\t}\n\n\t\t\t// the following two properties will be used for partial buffer updates\n\n\t\t\tuniform.__data = new Float32Array( infos.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\tuniform.__offset = offset;\n\n\t\t\t//\n\n\t\t\tif ( i > 0 ) {\n\n\t\t\t\tchunkOffset = offset % chunkSize;\n\n\t\t\t\tconst remainingSizeInChunk = chunkSize - chunkOffset;\n\n\t\t\t\t// check for chunk overflow\n\n\t\t\t\tif ( chunkOffset !== 0 && ( remainingSizeInChunk - infos.boundary ) < 0 ) {\n\n\t\t\t\t\t// add padding and adjust offset\n\n\t\t\t\t\toffset += ( chunkSize - chunkOffset );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toffset += infos.storage;\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tchunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' ) {\n\n\t\t\t// float/int\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nfunction WebGLRenderer( parameters = {} ) {\n\n\tthis.isWebGLRenderer = true;\n\n\tconst _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(),\n\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default',\n\t\t_failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false;\n\n\tlet _alpha;\n\n\tif ( _context !== null ) {\n\n\t\t_alpha = _context.getContextAttributes().alpha;\n\n\t} else {\n\n\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false;\n\n\t}\n\n\tlet currentRenderList = null;\n\tlet currentRenderState = null;\n\n\t// render() can be called from within a callback triggered by another render.\n\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\tconst renderListStack = [];\n\tconst renderStateStack = [];\n\n\t// public properties\n\n\tthis.domElement = _canvas;\n\n\t// Debug configuration container\n\tthis.debug = {\n\n\t\t/**\n\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t * @type {boolean}\n\t\t */\n\t\tcheckShaderErrors: true\n\t};\n\n\t// clearing\n\n\tthis.autoClear = true;\n\tthis.autoClearColor = true;\n\tthis.autoClearDepth = true;\n\tthis.autoClearStencil = true;\n\n\t// scene graph\n\n\tthis.sortObjects = true;\n\n\t// user-defined clipping\n\n\tthis.clippingPlanes = [];\n\tthis.localClippingEnabled = false;\n\n\t// physically based shading\n\n\tthis.outputEncoding = LinearEncoding;\n\n\t// physical lights\n\n\tthis.useLegacyLights = true;\n\n\t// tone mapping\n\n\tthis.toneMapping = NoToneMapping;\n\tthis.toneMappingExposure = 1.0;\n\n\t// internal properties\n\n\tconst _this = this;\n\n\tlet _isContextLost = false;\n\n\t// internal state cache\n\n\tlet _currentActiveCubeFace = 0;\n\tlet _currentActiveMipmapLevel = 0;\n\tlet _currentRenderTarget = null;\n\tlet _currentMaterialId = - 1;\n\n\tlet _currentCamera = null;\n\n\tconst _currentViewport = new Vector4();\n\tconst _currentScissor = new Vector4();\n\tlet _currentScissorTest = null;\n\n\t//\n\n\tlet _width = _canvas.width;\n\tlet _height = _canvas.height;\n\n\tlet _pixelRatio = 1;\n\tlet _opaqueSort = null;\n\tlet _transparentSort = null;\n\n\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\tlet _scissorTest = false;\n\n\t// frustum\n\n\tconst _frustum = new Frustum();\n\n\t// clipping\n\n\tlet _clippingEnabled = false;\n\tlet _localClippingEnabled = false;\n\n\t// transmission\n\n\tlet _transmissionRenderTarget = null;\n\n\t// camera matrices cache\n\n\tconst _projScreenMatrix = new Matrix4();\n\n\tconst _vector3 = new Vector3();\n\n\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\tfunction getTargetPixelRatio() {\n\n\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t}\n\n\t// initialize\n\n\tlet _gl = _context;\n\n\tfunction getContext( contextNames, contextAttributes ) {\n\n\t\tfor ( let i = 0; i < contextNames.length; i ++ ) {\n\n\t\t\tconst contextName = contextNames[ i ];\n\t\t\tconst context = _canvas.getContext( contextName, contextAttributes );\n\t\t\tif ( context !== null ) return context;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\ttry {\n\n\t\tconst contextAttributes = {\n\t\t\talpha: true,\n\t\t\tdepth: _depth,\n\t\t\tstencil: _stencil,\n\t\t\tantialias: _antialias,\n\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\tpowerPreference: _powerPreference,\n\t\t\tfailIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat\n\t\t};\n\n\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\tif ( 'setAttribute' in _canvas ) _canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\tif ( _gl === null ) {\n\n\t\t\tconst contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];\n\n\t\t\tif ( _this.isWebGL1Renderer === true ) {\n\n\t\t\t\tcontextNames.shift();\n\n\t\t\t}\n\n\t\t\t_gl = getContext( contextNames, contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( getContext( contextNames ) ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t};\n\n\t\t}\n\n\t} catch ( error ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\tthrow error;\n\n\t}\n\n\tlet extensions, capabilities, state, info;\n\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\tlet utils, bindingStates, uniformsGroups;\n\n\tfunction initGLContext() {\n\n\t\textensions = new WebGLExtensions( _gl );\n\n\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\textensions.init( capabilities );\n\n\t\tutils = new WebGLUtils( _gl, extensions, capabilities );\n\n\t\tstate = new WebGLState( _gl, extensions, capabilities );\n\n\t\tinfo = new WebGLInfo();\n\t\tproperties = new WebGLProperties();\n\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\tattributes = new WebGLAttributes( _gl, capabilities );\n\t\tbindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );\n\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\tclipping = new WebGLClipping( properties );\n\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\trenderLists = new WebGLRenderLists();\n\t\trenderStates = new WebGLRenderStates( extensions, capabilities );\n\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, _premultipliedAlpha );\n\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );\n\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );\n\n\t\tinfo.programs = programCache.programs;\n\n\t\t_this.capabilities = capabilities;\n\t\t_this.extensions = extensions;\n\t\t_this.properties = properties;\n\t\t_this.renderLists = renderLists;\n\t\t_this.shadowMap = shadowMap;\n\t\t_this.state = state;\n\t\t_this.info = info;\n\n\t}\n\n\tinitGLContext();\n\n\t// xr\n\n\tconst xr = new WebXRManager( _this, _gl );\n\n\tthis.xr = xr;\n\n\t// API\n\n\tthis.getContext = function () {\n\n\t\treturn _gl;\n\n\t};\n\n\tthis.getContextAttributes = function () {\n\n\t\treturn _gl.getContextAttributes();\n\n\t};\n\n\tthis.forceContextLoss = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.loseContext();\n\n\t};\n\n\tthis.forceContextRestore = function () {\n\n\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\tif ( extension ) extension.restoreContext();\n\n\t};\n\n\tthis.getPixelRatio = function () {\n\n\t\treturn _pixelRatio;\n\n\t};\n\n\tthis.setPixelRatio = function ( value ) {\n\n\t\tif ( value === undefined ) return;\n\n\t\t_pixelRatio = value;\n\n\t\tthis.setSize( _width, _height, false );\n\n\t};\n\n\tthis.getSize = function ( target ) {\n\n\t\treturn target.set( _width, _height );\n\n\t};\n\n\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\tif ( xr.isPresenting ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_canvas.width = Math.floor( width * _pixelRatio );\n\t\t_canvas.height = Math.floor( height * _pixelRatio );\n\n\t\tif ( updateStyle === true ) {\n\n\t\t\t_canvas.style.width = width + 'px';\n\t\t\t_canvas.style.height = height + 'px';\n\n\t\t}\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t};\n\n\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t_width = width;\n\t\t_height = height;\n\n\t\t_pixelRatio = pixelRatio;\n\n\t\t_canvas.width = Math.floor( width * pixelRatio );\n\t\t_canvas.height = Math.floor( height * pixelRatio );\n\n\t\tthis.setViewport( 0, 0, width, height );\n\n\t};\n\n\tthis.getCurrentViewport = function ( target ) {\n\n\t\treturn target.copy( _currentViewport );\n\n\t};\n\n\tthis.getViewport = function ( target ) {\n\n\t\treturn target.copy( _viewport );\n\n\t};\n\n\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_viewport.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissor = function ( target ) {\n\n\t\treturn target.copy( _scissor );\n\n\t};\n\n\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\tif ( x.isVector4 ) {\n\n\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t} else {\n\n\t\t\t_scissor.set( x, y, width, height );\n\n\t\t}\n\n\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );\n\n\t};\n\n\tthis.getScissorTest = function () {\n\n\t\treturn _scissorTest;\n\n\t};\n\n\tthis.setScissorTest = function ( boolean ) {\n\n\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t};\n\n\tthis.setOpaqueSort = function ( method ) {\n\n\t\t_opaqueSort = method;\n\n\t};\n\n\tthis.setTransparentSort = function ( method ) {\n\n\t\t_transparentSort = method;\n\n\t};\n\n\t// Clearing\n\n\tthis.getClearColor = function ( target ) {\n\n\t\treturn target.copy( background.getClearColor() );\n\n\t};\n\n\tthis.setClearColor = function () {\n\n\t\tbackground.setClearColor.apply( background, arguments );\n\n\t};\n\n\tthis.getClearAlpha = function () {\n\n\t\treturn background.getClearAlpha();\n\n\t};\n\n\tthis.setClearAlpha = function () {\n\n\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t};\n\n\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\tlet bits = 0;\n\n\t\tif ( color ) bits |= 16384;\n\t\tif ( depth ) bits |= 256;\n\t\tif ( stencil ) bits |= 1024;\n\n\t\t_gl.clear( bits );\n\n\t};\n\n\tthis.clearColor = function () {\n\n\t\tthis.clear( true, false, false );\n\n\t};\n\n\tthis.clearDepth = function () {\n\n\t\tthis.clear( false, true, false );\n\n\t};\n\n\tthis.clearStencil = function () {\n\n\t\tthis.clear( false, false, true );\n\n\t};\n\n\t//\n\n\tthis.dispose = function () {\n\n\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t_canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\trenderLists.dispose();\n\t\trenderStates.dispose();\n\t\tproperties.dispose();\n\t\tcubemaps.dispose();\n\t\tcubeuvmaps.dispose();\n\t\tobjects.dispose();\n\t\tbindingStates.dispose();\n\t\tuniformsGroups.dispose();\n\t\tprogramCache.dispose();\n\n\t\txr.dispose();\n\n\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\tif ( _transmissionRenderTarget ) {\n\n\t\t\t_transmissionRenderTarget.dispose();\n\t\t\t_transmissionRenderTarget = null;\n\n\t\t}\n\n\t\tanimation.stop();\n\n\t};\n\n\t// Events\n\n\tfunction onContextLost( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t_isContextLost = true;\n\n\t}\n\n\tfunction onContextRestore( /* event */ ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t_isContextLost = false;\n\n\t\tconst infoAutoReset = info.autoReset;\n\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\tconst shadowMapType = shadowMap.type;\n\n\t\tinitGLContext();\n\n\t\tinfo.autoReset = infoAutoReset;\n\t\tshadowMap.enabled = shadowMapEnabled;\n\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\tshadowMap.type = shadowMapType;\n\n\t}\n\n\tfunction onContextCreationError( event ) {\n\n\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\tdeallocateMaterial( material );\n\n\t}\n\n\t// Buffer deallocation\n\n\tfunction deallocateMaterial( material ) {\n\n\t\treleaseMaterialProgramReferences( material );\n\n\t\tproperties.remove( material );\n\n\t}\n\n\n\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\tconst programs = properties.get( material ).programs;\n\n\t\tif ( programs !== undefined ) {\n\n\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t} );\n\n\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Buffer rendering\n\n\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t//\n\n\t\tlet index = geometry.index;\n\t\tlet rangeFactor = 1;\n\n\t\tif ( material.wireframe === true ) {\n\n\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\trangeFactor = 2;\n\n\t\t}\n\n\t\t//\n\n\t\tconst drawRange = geometry.drawRange;\n\t\tconst position = geometry.attributes.position;\n\n\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\tif ( group !== null ) {\n\n\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t}\n\n\t\tif ( index !== null ) {\n\n\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t}\n\n\t\tconst drawCount = drawEnd - drawStart;\n\n\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t//\n\n\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\tlet attribute;\n\t\tlet renderer = bufferRenderer;\n\n\t\tif ( index !== null ) {\n\n\t\t\tattribute = attributes.get( index );\n\n\t\t\trenderer = indexedBufferRenderer;\n\t\t\trenderer.setIndex( attribute );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( object.isMesh ) {\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 4 );\n\n\t\t\t}\n\n\t\t} else if ( object.isLine ) {\n\n\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\trenderer.setMode( 1 );\n\n\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\trenderer.setMode( 2 );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.setMode( 3 );\n\n\t\t\t}\n\n\t\t} else if ( object.isPoints ) {\n\n\t\t\trenderer.setMode( 0 );\n\n\t\t} else if ( object.isSprite ) {\n\n\t\t\trenderer.setMode( 4 );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t} else {\n\n\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t}\n\n\t};\n\n\t// Compile\n\n\tthis.compile = function ( scene, camera ) {\n\n\t\tfunction prepare( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentRenderState = renderStates.get( scene );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\tcurrentRenderState.setupLights( _this.useLegacyLights );\n\n\t\tscene.traverse( function ( object ) {\n\n\t\t\tconst material = object.material;\n\n\t\t\tif ( material ) {\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\tprepare( material2, scene, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprepare( material, scene, object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t\trenderStateStack.pop();\n\t\tcurrentRenderState = null;\n\n\t};\n\n\t// Animation Loop\n\n\tlet onAnimationFrameCallback = null;\n\n\tfunction onAnimationFrame( time ) {\n\n\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t}\n\n\tfunction onXRSessionStart() {\n\n\t\tanimation.stop();\n\n\t}\n\n\tfunction onXRSessionEnd() {\n\n\t\tanimation.start();\n\n\t}\n\n\tconst animation = new WebGLAnimation();\n\tanimation.setAnimationLoop( onAnimationFrame );\n\n\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\tthis.setAnimationLoop = function ( callback ) {\n\n\t\tonAnimationFrameCallback = callback;\n\t\txr.setAnimationLoop( callback );\n\n\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t};\n\n\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t// Rendering\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( _isContextLost === true ) return;\n\n\t\t// update scene graph\n\n\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t// update camera matrices and frustum\n\n\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t}\n\n\t\t//\n\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\tcurrentRenderState.init();\n\n\t\trenderStateStack.push( currentRenderState );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\tcurrentRenderList.init();\n\n\t\trenderListStack.push( currentRenderList );\n\n\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\tcurrentRenderList.finish();\n\n\t\tif ( _this.sortObjects === true ) {\n\n\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t//\n\n\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t//\n\n\t\tbackground.render( currentRenderList, scene );\n\n\t\t// render scene\n\n\t\tcurrentRenderState.setupLights( _this.useLegacyLights );\n\n\t\tif ( camera.isArrayCamera ) {\n\n\t\t\tconst cameras = camera.cameras;\n\n\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t// _gl.finish();\n\n\t\tbindingStates.resetDefaultState();\n\t\t_currentMaterialId = - 1;\n\t\t_currentCamera = null;\n\n\t\trenderStateStack.pop();\n\n\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderState = null;\n\n\t\t}\n\n\t\trenderListStack.pop();\n\n\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t} else {\n\n\t\t\tcurrentRenderList = null;\n\n\t\t}\n\n\t};\n\n\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible ) {\n\n\t\t\tif ( object.isGroup ) {\n\n\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t// update skeleton only once in a frame\n\n\t\t\t\t\tif ( object.skeleton.frame !== info.render.frame ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\t\t\t\t\t\tobject.skeleton.frame = info.render.frame;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t}\n\n\t}\n\n\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, scene, camera );\n\n\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\tstate.buffers.depth.setTest( true );\n\t\tstate.buffers.depth.setMask( true );\n\t\tstate.buffers.color.setMask( true );\n\n\t\tstate.setPolygonOffset( false );\n\n\t}\n\n\tfunction renderTransmissionPass( opaqueObjects, scene, camera ) {\n\n\t\tconst isWebGL2 = capabilities.isWebGL2;\n\n\t\tif ( _transmissionRenderTarget === null ) {\n\n\t\t\t_transmissionRenderTarget = new WebGLRenderTarget( 1024, 1024, {\n\t\t\t\tgenerateMipmaps: true,\n\t\t\t\ttype: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\tsamples: ( isWebGL2 && _antialias === true ) ? 4 : 0\n\t\t\t} );\n\n\t\t}\n\n\t\t//\n\n\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t_this.setRenderTarget( _transmissionRenderTarget );\n\t\t_this.clear();\n\n\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\tconst currentToneMapping = _this.toneMapping;\n\t\t_this.toneMapping = NoToneMapping;\n\n\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t_this.toneMapping = currentToneMapping;\n\n\t\ttextures.updateMultisampleRenderTarget( _transmissionRenderTarget );\n\t\ttextures.updateRenderTargetMipmap( _transmissionRenderTarget );\n\n\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t}\n\n\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\tconst object = renderItem.object;\n\t\t\tconst geometry = renderItem.geometry;\n\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\tconst group = renderItem.group;\n\n\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\tmaterial.onBeforeRender( _this, scene, camera, geometry, object, group );\n\n\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\tmaterial.side = BackSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = FrontSide;\n\t\t\tmaterial.needsUpdate = true;\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\tmaterial.side = DoubleSide;\n\n\t\t} else {\n\n\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t}\n\n\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t}\n\n\tfunction getProgram( material, scene, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst lights = currentRenderState.state.lights;\n\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\tconst lightsStateVersion = lights.state.version;\n\n\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\tlet programs = materialProperties.programs;\n\n\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tmaterialProperties.fog = scene.fog;\n\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\n\t\tif ( programs === undefined ) {\n\n\t\t\t// new material\n\n\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tprograms = new Map();\n\t\t\tmaterialProperties.programs = programs;\n\n\t\t}\n\n\t\tlet program = programs.get( programCacheKey );\n\n\t\tif ( program !== undefined ) {\n\n\t\t\t// early out if program and light state is identical\n\n\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\treturn program;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\tmaterial.onBuild( object, parameters, _this );\n\n\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t}\n\n\t\tconst uniforms = materialProperties.uniforms;\n\n\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t}\n\n\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t// store the light setup it was created for\n\n\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t}\n\n\t\tconst progUniforms = program.getUniforms();\n\t\tconst uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\tmaterialProperties.currentProgram = program;\n\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\treturn program;\n\n\t}\n\n\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tmaterialProperties.outputEncoding = parameters.outputEncoding;\n\t\tmaterialProperties.instancing = parameters.instancing;\n\t\tmaterialProperties.skinning = parameters.skinning;\n\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t}\n\n\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\ttextures.resetTextureUnits();\n\n\t\tconst fog = scene.fog;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\tconst encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding );\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\tconst vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;\n\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\tconst morphColors = !! geometry.morphAttributes.color;\n\t\tconst toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tconst materialProperties = properties.get( material );\n\t\tconst lights = currentRenderState.state.lights;\n\n\t\tif ( _clippingEnabled === true ) {\n\n\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\tconst useCache =\n\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t// (#8465, #8379)\n\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet needsProgramChange = false;\n\n\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.outputEncoding !== encoding ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\tneedsProgramChange = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tneedsProgramChange = true;\n\t\t\tmaterialProperties.__version = material.version;\n\n\t\t}\n\n\t\t//\n\n\t\tlet program = materialProperties.currentProgram;\n\n\t\tif ( needsProgramChange === true ) {\n\n\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t}\n\n\t\tlet refreshProgram = false;\n\t\tlet refreshMaterial = false;\n\t\tlet refreshLights = false;\n\n\t\tconst p_uniforms = program.getUniforms(),\n\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\trefreshProgram = true;\n\t\t\trefreshMaterial = true;\n\t\t\trefreshLights = true;\n\n\t\t}\n\n\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t_currentMaterialId = material.id;\n\n\t\t\trefreshMaterial = true;\n\n\t\t}\n\n\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t}\n\n\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t}\n\n\t\t\t// load material specific uniforms\n\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\tmaterial.isShadowMaterial ||\n\t\t\t\tobject.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( skeleton ) {\n\n\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {\n\n\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t}\n\n\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t}\n\n\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t}\n\n\t\tif ( refreshMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t// values\n\t\t\t\t//\n\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t// the GL state when required\n\n\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t}\n\n\t\t\t// refresh uniforms common to several materials\n\n\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t}\n\n\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\n\t\t}\n\n\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );\n\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t}\n\n\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t}\n\n\t\t// common matrices\n\n\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t// UBOs\n\n\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tif ( capabilities.isWebGL2 ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\tuniforms.directionalLights.needsUpdate = value;\n\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\tuniforms.pointLights.needsUpdate = value;\n\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\tuniforms.spotLights.needsUpdate = value;\n\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t}\n\n\tfunction materialNeedsLights( material ) {\n\n\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t}\n\n\tthis.getActiveCubeFace = function () {\n\n\t\treturn _currentActiveCubeFace;\n\n\t};\n\n\tthis.getActiveMipmapLevel = function () {\n\n\t\treturn _currentActiveMipmapLevel;\n\n\t};\n\n\tthis.getRenderTarget = function () {\n\n\t\treturn _currentRenderTarget;\n\n\t};\n\n\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\tif ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t};\n\n\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t_currentRenderTarget = renderTarget;\n\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\tlet useDefaultFramebuffer = true;\n\t\tlet framebuffer = null;\n\t\tlet isCube = false;\n\t\tlet isRenderTarget3D = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\tstate.bindFramebuffer( 36160, null );\n\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t}\n\n\t\t\tconst texture = renderTarget.texture;\n\n\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t}\n\n\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\t\t\t\tisCube = true;\n\n\t\t\t} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t} else {\n\n\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t}\n\n\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t} else {\n\n\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t}\n\n\t\tconst framebufferBound = state.bindFramebuffer( 36160, framebuffer );\n\n\t\tif ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {\n\n\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t}\n\n\t\tstate.viewport( _currentViewport );\n\t\tstate.scissor( _currentScissor );\n\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\tif ( isCube ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t_gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t_gl.framebufferTextureLayer( 36160, 36064, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t}\n\n\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t};\n\n\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t}\n\n\t\tif ( framebuffer ) {\n\n\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\ttry {\n\n\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );\n\n\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t! halfFloatSupportedByExt ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t}\n\n\t\t\t} finally {\n\n\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\tstate.bindFramebuffer( 36160, framebuffer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.copyFramebufferToTexture = function ( position, texture, level = 0 ) {\n\n\t\tconst levelScale = Math.pow( 2, - level );\n\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t_gl.copyTexSubImage2D( 3553, level, 0, 0, position.x, position.y, width, height );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tconst width = srcTexture.image.width;\n\t\tconst height = srcTexture.image.height;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t// As another texture upload may have changed pixelStorei\n\t\t// parameters, make sure they are correct for the dstTexture\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t_gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {\n\n\t\tif ( _this.isWebGL1Renderer ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst width = sourceBox.max.x - sourceBox.min.x + 1;\n\t\tconst height = sourceBox.max.y - sourceBox.min.y + 1;\n\t\tconst depth = sourceBox.max.z - sourceBox.min.z + 1;\n\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\tconst glType = utils.convert( dstTexture.type );\n\t\tlet glTarget;\n\n\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\tglTarget = 32879;\n\n\t\t} else if ( dstTexture.isDataArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\tglTarget = 35866;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t_gl.pixelStorei( 37440, dstTexture.flipY );\n\t\t_gl.pixelStorei( 37441, dstTexture.premultiplyAlpha );\n\t\t_gl.pixelStorei( 3317, dstTexture.unpackAlignment );\n\n\t\tconst unpackRowLen = _gl.getParameter( 3314 );\n\t\tconst unpackImageHeight = _gl.getParameter( 32878 );\n\t\tconst unpackSkipPixels = _gl.getParameter( 3316 );\n\t\tconst unpackSkipRows = _gl.getParameter( 3315 );\n\t\tconst unpackSkipImages = _gl.getParameter( 32877 );\n\n\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;\n\n\t\t_gl.pixelStorei( 3314, image.width );\n\t\t_gl.pixelStorei( 32878, image.height );\n\t\t_gl.pixelStorei( 3316, sourceBox.min.x );\n\t\t_gl.pixelStorei( 3315, sourceBox.min.y );\n\t\t_gl.pixelStorei( 32877, sourceBox.min.z );\n\n\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );\n\n\t\t} else {\n\n\t\t\tif ( srcTexture.isCompressedArrayTexture ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );\n\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.pixelStorei( 3314, unpackRowLen );\n\t\t_gl.pixelStorei( 32878, unpackImageHeight );\n\t\t_gl.pixelStorei( 3316, unpackSkipPixels );\n\t\t_gl.pixelStorei( 3315, unpackSkipRows );\n\t\t_gl.pixelStorei( 32877, unpackSkipImages );\n\n\t\t// Generate mipmaps only when copying level 0\n\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.initTexture = function ( texture ) {\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t} else {\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t}\n\n\t\tstate.unbindTexture();\n\n\t};\n\n\tthis.resetState = function () {\n\n\t\t_currentActiveCubeFace = 0;\n\t\t_currentActiveMipmapLevel = 0;\n\t\t_currentRenderTarget = null;\n\n\t\tstate.reset();\n\t\tbindingStates.reset();\n\n\t};\n\n\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t}\n\n}\n\nObject.defineProperties( WebGLRenderer.prototype, {\n\n\t// @deprecated since r150\n\n\tphysicallyCorrectLights: {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );\n\t\t\treturn ! this.useLegacyLights;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );\n\t\t\tthis.useLegacyLights = ! value;\n\n\t\t}\n\n\t}\n\n} );\n\nclass WebGL1Renderer extends WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\n\t\treturn data;\n\n\t}\n\n\t// @deprecated\n\n\tget autoUpdate() {\n\n\t\tconsole.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );\n\t\treturn this.matrixWorldAutoUpdate;\n\n\t}\n\n\tset autoUpdate( value ) {\n\n\t\tconsole.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );\n\t\tthis.matrixWorldAutoUpdate = value;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tboneTransform( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( target ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector$5.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = ceilPowerOfTwo( size );\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\t\tthis.boneTextureSize = size;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh = /*@__PURE__*/ new Mesh();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\n\t\tthis.count = count;\n\n\t\tthis.frustumCulled = false;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _start$1 = /*@__PURE__*/ new Vector3();\nconst _end$1 = /*@__PURE__*/ new Vector3();\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_start$1.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_end$1.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _start$1.distanceTo( _end$1 );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst vStart = new Vector3();\n\t\tconst vEnd = new Vector3();\n\t\tconst interSegment = new Vector3();\n\t\tconst interRay = new Vector3();\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, a );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, b );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tvStart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\tvEnd.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tconst distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\tif ( distSq > localThresholdSq ) continue;\n\n\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\tconst distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\tindex: i,\n\t\t\t\t\tface: null,\n\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height, format ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.format = format;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._sheen = 0.0;\n\t\tthis._clearcoat = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// same as Array.prototype.slice, but also works on typed arrays\nfunction arraySlice( array, from, to ) {\n\n\tif ( isTypedArray( array ) ) {\n\n\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t}\n\n\treturn array.slice( from, to );\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tarraySlice: arraySlice,\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = arraySlice( times, from, to );\n\t\t\tthis.values = arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = arraySlice( this.times ),\n\t\t\tvalues = arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = arraySlice( this.times, 0 );\n\t\tconst values = arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tif ( attribute.updateRange !== undefined ) {\n\n\t\t\t\tbufferAttribute.updateRange.offset = attribute.updateRange.offset;\n\t\t\t\tbufferAttribute.updateRange.count = attribute.updateRange.count;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n}\n\nclass HemisphereLightProbe extends LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isHemisphereLightProbe = true;\n\n\t\tconst color1 = new Color().set( skyColor );\n\t\tconst color2 = new Color().set( groundColor );\n\n\t\tconst sky = new Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nclass AmbientLightProbe extends LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isAmbientLightProbe = true;\n\n\t\tconst color1 = new Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tthis.uniforms.push( uniformsSource[ i ].clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersectObject( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t}\n\n\tif ( recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.\n * The azimuthal angle (theta) is measured from the positive z-axis.\n */\n\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\n// r144\n\nclass BoxBufferGeometry extends BoxGeometry {\n\n\tconstructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tconsole.warn( 'THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry.' );\n\t\tsuper( width, height, depth, widthSegments, heightSegments, depthSegments );\n\n\n\t}\n\n}\n\n// r144\n\nclass CapsuleBufferGeometry extends CapsuleGeometry {\n\n\tconstructor( radius, length, capSegments, radialSegments ) {\n\n\t\tconsole.warn( 'THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry.' );\n\t\tsuper( radius, length, capSegments, radialSegments );\n\n\t}\n\n}\n\n// r144\n\nclass CircleBufferGeometry extends CircleGeometry {\n\n\tconstructor( radius, segments, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry.' );\n\t\tsuper( radius, segments, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass ConeBufferGeometry extends ConeGeometry {\n\n\tconstructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.ConeBufferGeometry has been renamed to THREE.ConeGeometry.' );\n\t\tsuper( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass CylinderBufferGeometry extends CylinderGeometry {\n\n\tconstructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.CylinderBufferGeometry has been renamed to THREE.CylinderGeometry.' );\n\t\tsuper( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass DodecahedronBufferGeometry extends DodecahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.DodecahedronBufferGeometry has been renamed to THREE.DodecahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass ExtrudeBufferGeometry extends ExtrudeGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry has been renamed to THREE.ExtrudeGeometry.' );\n\t\tsuper( shapes, options );\n\n\t}\n\n}\n\n// r144\n\nclass IcosahedronBufferGeometry extends IcosahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.IcosahedronBufferGeometry has been renamed to THREE.IcosahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass LatheBufferGeometry extends LatheGeometry {\n\n\tconstructor( points, segments, phiStart, phiLength ) {\n\n\t\tconsole.warn( 'THREE.LatheBufferGeometry has been renamed to THREE.LatheGeometry.' );\n\t\tsuper( points, segments, phiStart, phiLength );\n\n\t}\n\n}\n\n// r144\n\nclass OctahedronBufferGeometry extends OctahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.OctahedronBufferGeometry has been renamed to THREE.OctahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass PlaneBufferGeometry extends PlaneGeometry {\n\n\tconstructor( width, height, widthSegments, heightSegments ) {\n\n\t\tconsole.warn( 'THREE.PlaneBufferGeometry has been renamed to THREE.PlaneGeometry.' );\n\t\tsuper( width, height, widthSegments, heightSegments );\n\n\t}\n\n}\n\n// r144\n\nclass PolyhedronBufferGeometry extends PolyhedronGeometry {\n\n\tconstructor( vertices, indices, radius, detail ) {\n\n\t\tconsole.warn( 'THREE.PolyhedronBufferGeometry has been renamed to THREE.PolyhedronGeometry.' );\n\t\tsuper( vertices, indices, radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass RingBufferGeometry extends RingGeometry {\n\n\tconstructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.RingBufferGeometry has been renamed to THREE.RingGeometry.' );\n\t\tsuper( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass ShapeBufferGeometry extends ShapeGeometry {\n\n\tconstructor( shapes, curveSegments ) {\n\n\t\tconsole.warn( 'THREE.ShapeBufferGeometry has been renamed to THREE.ShapeGeometry.' );\n\t\tsuper( shapes, curveSegments );\n\n\t}\n\n}\n\n// r144\n\nclass SphereBufferGeometry extends SphereGeometry {\n\n\tconstructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tconsole.warn( 'THREE.SphereBufferGeometry has been renamed to THREE.SphereGeometry.' );\n\t\tsuper( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );\n\n\t}\n\n}\n\n// r144\n\nclass TetrahedronBufferGeometry extends TetrahedronGeometry {\n\n\tconstructor( radius, detail ) {\n\n\t\tconsole.warn( 'THREE.TetrahedronBufferGeometry has been renamed to THREE.TetrahedronGeometry.' );\n\t\tsuper( radius, detail );\n\n\t}\n\n}\n\n// r144\n\nclass TorusBufferGeometry extends TorusGeometry {\n\n\tconstructor( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tconsole.warn( 'THREE.TorusBufferGeometry has been renamed to THREE.TorusGeometry.' );\n\t\tsuper( radius, tube, radialSegments, tubularSegments, arc );\n\n\t}\n\n}\n\n// r144\n\nclass TorusKnotBufferGeometry extends TorusKnotGeometry {\n\n\tconstructor( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\t\tconsole.warn( 'THREE.TorusKnotBufferGeometry has been renamed to THREE.TorusKnotGeometry.' );\n\t\tsuper( radius, tube, tubularSegments, radialSegments, p, q );\n\n\t}\n\n}\n\n// r144\n\nclass TubeBufferGeometry extends TubeGeometry {\n\n\tconstructor( path, tubularSegments, radius, radialSegments, closed ) {\n\n\t\tconsole.warn( 'THREE.TubeBufferGeometry has been renamed to THREE.TubeGeometry.' );\n\t\tsuper( path, tubularSegments, radius, radialSegments, closed );\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AlphaFormat, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AmbientLightProbe, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxBufferGeometry, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleBufferGeometry, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleBufferGeometry, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedTexture, CompressedTextureLoader, ConeBufferGeometry, ConeGeometry, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderBufferGeometry, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronBufferGeometry, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeBufferGeometry, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, Float64BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterDepth, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, HemisphereLightProbe, IcosahedronBufferGeometry, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheBufferGeometry, LatheGeometry, Layers, LessDepth, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearEncoding, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronBufferGeometry, OctahedronGeometry, OneFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneBufferGeometry, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronBufferGeometry, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingBufferGeometry, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeBufferGeometry, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereBufferGeometry, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronBufferGeometry, TetrahedronGeometry, Texture, TextureLoader, TorusBufferGeometry, TorusGeometry, TorusKnotBufferGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeBufferGeometry, TubeGeometry, TwoPassDoubleSide, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL1Renderer, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, _SRGBAFormat, sRGBEncoding };\n","import { useReducer, useRef, useDebugValue, useEffect, useLayoutEffect } from 'react';\n\nfunction createStore(createState) {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (nextState !== state) {\n const previousState = state;\n state = replace ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribeWithSelector = (listener, selector = getState, equalityFn = Object.is) => {\n console.warn(\"[DEPRECATED] Please use `subscribeWithSelector` middleware\");\n let currentSlice = selector(state);\n function listenerToAdd() {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n listener(currentSlice = nextSlice, previousSlice);\n }\n }\n listeners.add(listenerToAdd);\n return () => listeners.delete(listenerToAdd);\n };\n const subscribe = (listener, selector, equalityFn) => {\n if (selector || equalityFn) {\n return subscribeWithSelector(listener, selector, equalityFn);\n }\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => listeners.clear();\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n}\n\nconst isSSR = typeof window === \"undefined\" || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\nconst useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;\nfunction create(createState) {\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useStore = (selector = api.getState, equalityFn = Object.is) => {\n const [, forceUpdate] = useReducer((c) => c + 1, 0);\n const state = api.getState();\n const stateRef = useRef(state);\n const selectorRef = useRef(selector);\n const equalityFnRef = useRef(equalityFn);\n const erroredRef = useRef(false);\n const currentSliceRef = useRef();\n if (currentSliceRef.current === void 0) {\n currentSliceRef.current = selector(state);\n }\n let newStateSlice;\n let hasNewStateSlice = false;\n if (stateRef.current !== state || selectorRef.current !== selector || equalityFnRef.current !== equalityFn || erroredRef.current) {\n newStateSlice = selector(state);\n hasNewStateSlice = !equalityFn(currentSliceRef.current, newStateSlice);\n }\n useIsomorphicLayoutEffect(() => {\n if (hasNewStateSlice) {\n currentSliceRef.current = newStateSlice;\n }\n stateRef.current = state;\n selectorRef.current = selector;\n equalityFnRef.current = equalityFn;\n erroredRef.current = false;\n });\n const stateBeforeSubscriptionRef = useRef(state);\n useIsomorphicLayoutEffect(() => {\n const listener = () => {\n try {\n const nextState = api.getState();\n const nextStateSlice = selectorRef.current(nextState);\n if (!equalityFnRef.current(currentSliceRef.current, nextStateSlice)) {\n stateRef.current = nextState;\n currentSliceRef.current = nextStateSlice;\n forceUpdate();\n }\n } catch (error) {\n erroredRef.current = true;\n forceUpdate();\n }\n };\n const unsubscribe = api.subscribe(listener);\n if (api.getState() !== stateBeforeSubscriptionRef.current) {\n listener();\n }\n return unsubscribe;\n }, []);\n const sliceToReturn = hasNewStateSlice ? newStateSlice : currentSliceRef.current;\n useDebugValue(sliceToReturn);\n return sliceToReturn;\n };\n Object.assign(useStore, api);\n useStore[Symbol.iterator] = function() {\n console.warn(\"[useStore, api] = create() is deprecated and will be removed in v4\");\n const items = [useStore, api];\n return {\n next() {\n const done = items.length <= 0;\n return { value: items.shift(), done };\n }\n };\n };\n return useStore;\n}\n\nexport { create as default };\n","function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n\n for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;\n\n return true;\n}\n\nconst globalCache = [];\n\nfunction query(fn, keys, preload = false, config = {}) {\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys, entry.equal)) {\n // If we're pre-loading and the element is present, just return\n if (preload) return undefined; // If an error occurred, throw\n\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return\n\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) return entry.response; // If the promise is still unresolved, throw\n\n if (!preload) throw entry.promise;\n }\n } // The request is new or has changed.\n\n\n const entry = {\n keys,\n equal: config.equal,\n promise: // Execute the promise\n fn(...keys) // When it resolves, store its value\n .then(response => entry.response = response) // Remove the entry if a lifespan was given\n .then(() => {\n if (config.lifespan && config.lifespan > 0) {\n setTimeout(() => {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }, config.lifespan);\n }\n }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch(error => entry.error = error)\n }; // Register the entry\n\n globalCache.push(entry); // And throw the promise, this yields control back to React\n\n if (!preload) throw entry.promise;\n return undefined;\n}\n\nconst suspend = (fn, keys, config) => query(fn, keys, false, config);\n\nconst preload = (fn, keys, config) => void query(fn, keys, true, config);\n\nconst peek = keys => {\n var _globalCache$find;\n\n return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;\n};\n\nconst clear = keys => {\n if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {\n const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));\n\n if (entry) {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n }\n }\n};\n\nexport { clear, peek, preload, suspend };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { DefaultEventPriority, ContinuousEventPriority, DiscreteEventPriority, ConcurrentRoot } from 'react-reconciler/constants';\nimport create from 'zustand';\nimport Reconciler from 'react-reconciler';\nimport { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';\nimport { suspend, preload, clear } from 'suspend-react';\n\nvar threeTypes = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\nconst catalogue = {};\nconst extend = objects => void Object.assign(catalogue, objects);\nfunction createRenderer(_roots, _getEventPriority) {\n function createInstance(type, {\n args = [],\n attach,\n ...props\n }, root) {\n let name = `${type[0].toUpperCase()}${type.slice(1)}`;\n let instance;\n if (type === 'primitive') {\n if (props.object === undefined) throw new Error(\"R3F: Primitives without 'object' are invalid!\");\n const object = props.object;\n instance = prepare(object, {\n type,\n root,\n attach,\n primitive: true\n });\n } else {\n const target = catalogue[name];\n if (!target) {\n throw new Error(`R3F: ${name} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);\n }\n\n // Throw if an object or literal was passed for args\n if (!Array.isArray(args)) throw new Error('R3F: The args prop must be an array!');\n\n // Instanciate new object, link it to the root\n // Append memoized props with args so it's not forgotten\n instance = prepare(new target(...args), {\n type,\n root,\n attach,\n // Save args in case we need to reconstruct later for HMR\n memoizedProps: {\n args\n }\n });\n }\n\n // Auto-attach geometries and materials\n if (instance.__r3f.attach === undefined) {\n if (instance instanceof THREE.BufferGeometry) instance.__r3f.attach = 'geometry';else if (instance instanceof THREE.Material) instance.__r3f.attach = 'material';\n }\n\n // It should NOT call onUpdate on object instanciation, because it hasn't been added to the\n // view yet. If the callback relies on references for instance, they won't be ready yet, this is\n // why it passes \"true\" here\n // There is no reason to apply props to injects\n if (name !== 'inject') applyProps$1(instance, props);\n return instance;\n }\n function appendChild(parentInstance, child) {\n let added = false;\n if (child) {\n var _child$__r3f, _parentInstance$__r3f;\n // The attach attribute implies that the object attaches itself on the parent\n if ((_child$__r3f = child.__r3f) != null && _child$__r3f.attach) {\n attach(parentInstance, child, child.__r3f.attach);\n } else if (child.isObject3D && parentInstance.isObject3D) {\n // add in the usual parent-child way\n parentInstance.add(child);\n added = true;\n }\n // This is for anything that used attach, and for non-Object3Ds that don't get attached to props;\n // that is, anything that's a child in React but not a child in the scenegraph.\n if (!added) (_parentInstance$__r3f = parentInstance.__r3f) == null ? void 0 : _parentInstance$__r3f.objects.push(child);\n if (!child.__r3f) prepare(child, {});\n child.__r3f.parent = parentInstance;\n updateInstance(child);\n invalidateInstance(child);\n }\n }\n function insertBefore(parentInstance, child, beforeChild) {\n let added = false;\n if (child) {\n var _child$__r3f2, _parentInstance$__r3f2;\n if ((_child$__r3f2 = child.__r3f) != null && _child$__r3f2.attach) {\n attach(parentInstance, child, child.__r3f.attach);\n } else if (child.isObject3D && parentInstance.isObject3D) {\n child.parent = parentInstance;\n child.dispatchEvent({\n type: 'added'\n });\n const restSiblings = parentInstance.children.filter(sibling => sibling !== child);\n const index = restSiblings.indexOf(beforeChild);\n parentInstance.children = [...restSiblings.slice(0, index), child, ...restSiblings.slice(index)];\n added = true;\n }\n if (!added) (_parentInstance$__r3f2 = parentInstance.__r3f) == null ? void 0 : _parentInstance$__r3f2.objects.push(child);\n if (!child.__r3f) prepare(child, {});\n child.__r3f.parent = parentInstance;\n updateInstance(child);\n invalidateInstance(child);\n }\n }\n function removeRecursive(array, parent, dispose = false) {\n if (array) [...array].forEach(child => removeChild(parent, child, dispose));\n }\n function removeChild(parentInstance, child, dispose) {\n if (child) {\n var _parentInstance$__r3f3, _child$__r3f3, _child$__r3f5;\n // Clear the parent reference\n if (child.__r3f) child.__r3f.parent = null;\n // Remove child from the parents objects\n if ((_parentInstance$__r3f3 = parentInstance.__r3f) != null && _parentInstance$__r3f3.objects) parentInstance.__r3f.objects = parentInstance.__r3f.objects.filter(x => x !== child);\n // Remove attachment\n if ((_child$__r3f3 = child.__r3f) != null && _child$__r3f3.attach) {\n detach(parentInstance, child, child.__r3f.attach);\n } else if (child.isObject3D && parentInstance.isObject3D) {\n var _child$__r3f4;\n parentInstance.remove(child);\n // Remove interactivity\n if ((_child$__r3f4 = child.__r3f) != null && _child$__r3f4.root) {\n removeInteractivity(child.__r3f.root, child);\n }\n }\n\n // Allow objects to bail out of recursive dispose altogether by passing dispose={null}\n // Never dispose of primitives because their state may be kept outside of React!\n // In order for an object to be able to dispose it has to have\n // - a dispose method,\n // - it cannot be a \n // - it cannot be a THREE.Scene, because three has broken it's own api\n //\n // Since disposal is recursive, we can check the optional dispose arg, which will be undefined\n // when the reconciler calls it, but then carry our own check recursively\n const isPrimitive = (_child$__r3f5 = child.__r3f) == null ? void 0 : _child$__r3f5.primitive;\n const shouldDispose = dispose === undefined ? child.dispose !== null && !isPrimitive : dispose;\n\n // Remove nested child objects. Primitives should not have objects and children that are\n // attached to them declaratively ...\n if (!isPrimitive) {\n var _child$__r3f6;\n removeRecursive((_child$__r3f6 = child.__r3f) == null ? void 0 : _child$__r3f6.objects, child, shouldDispose);\n removeRecursive(child.children, child, shouldDispose);\n }\n\n // Remove references\n if (child.__r3f) {\n delete child.__r3f.root;\n delete child.__r3f.objects;\n delete child.__r3f.handlers;\n delete child.__r3f.memoizedProps;\n if (!isPrimitive) delete child.__r3f;\n }\n\n // Dispose item whenever the reconciler feels like it\n if (shouldDispose && child.dispose && child.type !== 'Scene') {\n unstable_scheduleCallback(unstable_IdlePriority, () => {\n try {\n child.dispose();\n } catch (e) {\n /* ... */\n }\n });\n }\n invalidateInstance(parentInstance);\n }\n }\n function switchInstance(instance, type, newProps, fiber) {\n var _instance$__r3f;\n const parent = (_instance$__r3f = instance.__r3f) == null ? void 0 : _instance$__r3f.parent;\n if (!parent) return;\n const newInstance = createInstance(type, newProps, instance.__r3f.root);\n\n // https://github.com/pmndrs/react-three-fiber/issues/1348\n // When args change the instance has to be re-constructed, which then\n // forces r3f to re-parent the children and non-scene objects\n if (instance.children) {\n for (const child of instance.children) {\n if (child.__r3f) appendChild(newInstance, child);\n }\n instance.children = instance.children.filter(child => !child.__r3f);\n }\n instance.__r3f.objects.forEach(child => appendChild(newInstance, child));\n instance.__r3f.objects = [];\n if (!instance.__r3f.autoRemovedBeforeAppend) {\n removeChild(parent, instance);\n }\n if (newInstance.parent) {\n newInstance.__r3f.autoRemovedBeforeAppend = true;\n }\n appendChild(parent, newInstance);\n\n // Re-bind event handlers\n if (newInstance.raycast && newInstance.__r3f.eventCount) {\n const rootState = newInstance.__r3f.root.getState();\n rootState.internal.interaction.push(newInstance);\n }\n [fiber, fiber.alternate].forEach(fiber => {\n if (fiber !== null) {\n fiber.stateNode = newInstance;\n if (fiber.ref) {\n if (typeof fiber.ref === 'function') fiber.ref(newInstance);else fiber.ref.current = newInstance;\n }\n }\n });\n }\n\n // Don't handle text instances, warn on undefined behavior\n const handleTextInstance = () => console.warn('Text is not allowed in the R3F tree! This could be stray whitespace or characters.');\n const reconciler = Reconciler({\n createInstance,\n removeChild,\n appendChild,\n appendInitialChild: appendChild,\n insertBefore,\n supportsMutation: true,\n isPrimaryRenderer: false,\n supportsPersistence: false,\n supportsHydration: false,\n noTimeout: -1,\n appendChildToContainer: (container, child) => {\n if (!child) return;\n\n // Don't append to unmounted container\n const scene = container.getState().scene;\n if (!scene.__r3f) return;\n\n // Link current root to the default scene\n scene.__r3f.root = container;\n appendChild(scene, child);\n },\n removeChildFromContainer: (container, child) => {\n if (!child) return;\n removeChild(container.getState().scene, child);\n },\n insertInContainerBefore: (container, child, beforeChild) => {\n if (!child || !beforeChild) return;\n\n // Don't append to unmounted container\n const scene = container.getState().scene;\n if (!scene.__r3f) return;\n insertBefore(scene, child, beforeChild);\n },\n getRootHostContext: () => null,\n getChildHostContext: parentHostContext => parentHostContext,\n finalizeInitialChildren(instance) {\n var _instance$__r3f2;\n const localState = (_instance$__r3f2 = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f2 : {};\n // https://github.com/facebook/react/issues/20271\n // Returning true will trigger commitMount\n return Boolean(localState.handlers);\n },\n prepareUpdate(instance, _type, oldProps, newProps) {\n // Create diff-sets\n if (instance.__r3f.primitive && newProps.object && newProps.object !== instance) {\n return [true];\n } else {\n // This is a data object, let's extract critical information about it\n const {\n args: argsNew = [],\n children: cN,\n ...restNew\n } = newProps;\n const {\n args: argsOld = [],\n children: cO,\n ...restOld\n } = oldProps;\n\n // Throw if an object or literal was passed for args\n if (!Array.isArray(argsNew)) throw new Error('R3F: the args prop must be an array!');\n\n // If it has new props or arguments, then it needs to be re-instantiated\n if (argsNew.some((value, index) => value !== argsOld[index])) return [true];\n // Create a diff-set, flag if there are any changes\n const diff = diffProps(instance, restNew, restOld, true);\n if (diff.changes.length) return [false, diff];\n\n // Otherwise do not touch the instance\n return null;\n }\n },\n commitUpdate(instance, [reconstruct, diff], type, _oldProps, newProps, fiber) {\n // Reconstruct when args or instance,\n prepareForCommit: () => null,\n preparePortalMount: container => prepare(container.getState().scene),\n resetAfterCommit: () => {},\n shouldSetTextContent: () => false,\n clearContainer: () => false,\n hideInstance(instance) {\n var _instance$__r3f4;\n // Detach while the instance is hidden\n const {\n attach: type,\n parent\n } = (_instance$__r3f4 = instance.__r3f) != null ? _instance$__r3f4 : {};\n if (type && parent) detach(parent, instance, type);\n if (instance.isObject3D) instance.visible = false;\n invalidateInstance(instance);\n },\n unhideInstance(instance, props) {\n var _instance$__r3f5;\n // Re-attach when the instance is unhidden\n const {\n attach: type,\n parent\n } = (_instance$__r3f5 = instance.__r3f) != null ? _instance$__r3f5 : {};\n if (type && parent) attach(parent, instance, type);\n if (instance.isObject3D && props.visible == null || props.visible) instance.visible = true;\n invalidateInstance(instance);\n },\n createTextInstance: handleTextInstance,\n hideTextInstance: handleTextInstance,\n unhideTextInstance: handleTextInstance,\n // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874\n // @ts-ignore\n getCurrentEventPriority: () => _getEventPriority ? _getEventPriority() : DefaultEventPriority,\n beforeActiveInstanceBlur: () => {},\n afterActiveInstanceBlur: () => {},\n detachDeletedInstance: () => {},\n now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : () => 0,\n // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r920883503\n scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,\n cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined\n });\n return {\n reconciler,\n applyProps: applyProps$1\n };\n}\n\nvar _window$document, _window$navigator;\n/**\n * The current THREE.ColorManagement instance, if present.\n */\nconst getColorManagement = () => {\n var _ColorManagement;\n return (_ColorManagement = catalogue.ColorManagement) != null ? _ColorManagement : null;\n};\nconst isOrthographicCamera = def => def && def.isOrthographicCamera;\nconst isRef = obj => obj && obj.hasOwnProperty('current');\n\n/**\n * An SSR-friendly useLayoutEffect.\n *\n * React currently throws a warning when using useLayoutEffect on the server.\n * To get around it, we can conditionally useEffect on the server (no-op) and\n * useLayoutEffect elsewhere.\n *\n * @see https://github.com/facebook/react/issues/14927\n */\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && ((_window$document = window.document) != null && _window$document.createElement || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === 'ReactNative') ? React.useLayoutEffect : React.useEffect;\nfunction useMutableCallback(fn) {\n const ref = React.useRef(fn);\n useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]);\n return ref;\n}\nfunction Block({\n set\n}) {\n useIsomorphicLayoutEffect(() => {\n set(new Promise(() => null));\n return () => set(false);\n }, [set]);\n return null;\n}\nclass ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.state = {\n error: false\n };\n }\n componentDidCatch(err) {\n this.props.set(err);\n }\n render() {\n return this.state.error ? null : this.props.children;\n }\n}\nErrorBoundary.getDerivedStateFromError = () => ({\n error: true\n});\nconst DEFAULT = '__default';\nconst DEFAULTS = new Map();\nconst isDiffSet = def => def && !!def.memoized && !!def.changes;\nfunction calculateDpr(dpr) {\n const target = typeof window !== 'undefined' ? window.devicePixelRatio : 1;\n return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr;\n}\n\n/**\n * Returns instance root state\n */\nconst getRootState = obj => {\n var _r3f;\n return (_r3f = obj.__r3f) == null ? void 0 : _r3f.root.getState();\n};\n// A collection of compare functions\nconst is = {\n obj: a => a === Object(a) && !is.arr(a) && typeof a !== 'function',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n boo: a => typeof a === 'boolean',\n und: a => a === void 0,\n arr: a => Array.isArray(a),\n equ(a, b, {\n arrays = 'shallow',\n objects = 'reference',\n strict = true\n } = {}) {\n // Wrong type or one of the two undefined, doesn't match\n if (typeof a !== typeof b || !!a !== !!b) return false;\n // Atomic, just compare a against b\n if (is.str(a) || is.num(a)) return a === b;\n const isObj = is.obj(a);\n if (isObj && objects === 'reference') return a === b;\n const isArr = is.arr(a);\n if (isArr && arrays === 'reference') return a === b;\n // Array or Object, shallow compare first to see if it's a match\n if ((isArr || isObj) && a === b) return true;\n // Last resort, go through keys\n let i;\n // Check if a has all the keys of b\n for (i in a) if (!(i in b)) return false;\n // Check if values between keys match\n if (isObj && arrays === 'shallow' && objects === 'shallow') {\n for (i in strict ? b : a) if (!is.equ(a[i], b[i], {\n strict,\n objects: 'reference'\n })) return false;\n } else {\n for (i in strict ? b : a) if (a[i] !== b[i]) return false;\n }\n // If i is undefined\n if (is.und(i)) {\n // If both arrays are empty we consider them equal\n if (isArr && a.length === 0 && b.length === 0) return true;\n // If both objects are empty we consider them equal\n if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true;\n // Otherwise match them by value\n if (a !== b) return false;\n }\n return true;\n }\n};\n\n// Collects nodes and materials from a THREE.Object3D\nfunction buildGraph(object) {\n const data = {\n nodes: {},\n materials: {}\n };\n if (object) {\n object.traverse(obj => {\n if (obj.name) data.nodes[obj.name] = obj;\n if (obj.material && !data.materials[obj.material.name]) data.materials[obj.material.name] = obj.material;\n });\n }\n return data;\n}\n\n// Disposes an object and all its properties\nfunction dispose(obj) {\n if (obj.dispose && obj.type !== 'Scene') obj.dispose();\n for (const p in obj) {\n p.dispose == null ? void 0 : p.dispose();\n delete obj[p];\n }\n}\n\n// Each object in the scene carries a small LocalState descriptor\nfunction prepare(object, state) {\n const instance = object;\n if (state != null && state.primitive || !instance.__r3f) {\n instance.__r3f = {\n type: '',\n root: null,\n previousAttach: null,\n memoizedProps: {},\n eventCount: 0,\n handlers: {},\n objects: [],\n parent: null,\n ...state\n };\n }\n return object;\n}\nfunction resolve(instance, key) {\n let target = instance;\n if (key.includes('-')) {\n const entries = key.split('-');\n const last = entries.pop();\n target = entries.reduce((acc, key) => acc[key], instance);\n return {\n target,\n key: last\n };\n } else return {\n target,\n key\n };\n}\n\n// Checks if a dash-cased string ends with an integer\nconst INDEX_REGEX = /-\\d+$/;\nfunction attach(parent, child, type) {\n if (is.str(type)) {\n // If attaching into an array (foo-0), create one\n if (INDEX_REGEX.test(type)) {\n const root = type.replace(INDEX_REGEX, '');\n const {\n target,\n key\n } = resolve(parent, root);\n if (!Array.isArray(target[key])) target[key] = [];\n }\n const {\n target,\n key\n } = resolve(parent, type);\n child.__r3f.previousAttach = target[key];\n target[key] = child;\n } else child.__r3f.previousAttach = type(parent, child);\n}\nfunction detach(parent, child, type) {\n var _child$__r3f, _child$__r3f2;\n if (is.str(type)) {\n const {\n target,\n key\n } = resolve(parent, type);\n const previous = child.__r3f.previousAttach;\n // When the previous value was undefined, it means the value was never set to begin with\n if (previous === undefined) delete target[key];\n // Otherwise set the previous value\n else target[key] = previous;\n } else (_child$__r3f = child.__r3f) == null ? void 0 : _child$__r3f.previousAttach == null ? void 0 : _child$__r3f.previousAttach(parent, child);\n (_child$__r3f2 = child.__r3f) == null ? true : delete _child$__r3f2.previousAttach;\n}\n\n// This function prepares a set of changes to be applied to the instance\nfunction diffProps(instance, {\n children: cN,\n key: kN,\n ref: rN,\n ...props\n}, {\n children: cP,\n key: kP,\n ref: rP,\n ...previous\n} = {}, remove = false) {\n var _instance$__r3f;\n const localState = (_instance$__r3f = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f : {};\n const entries = Object.entries(props);\n const changes = [];\n\n // Catch removed props, prepend them so they can be reset or removed\n if (remove) {\n const previousKeys = Object.keys(previous);\n for (let i = 0; i < previousKeys.length; i++) {\n if (!props.hasOwnProperty(previousKeys[i])) entries.unshift([previousKeys[i], DEFAULT + 'remove']);\n }\n }\n entries.forEach(([key, value]) => {\n var _instance$__r3f2;\n // Bail out on primitive object\n if ((_instance$__r3f2 = instance.__r3f) != null && _instance$__r3f2.primitive && key === 'object') return;\n // When props match bail out\n if (is.equ(value, previous[key])) return;\n // Collect handlers and bail out\n if (/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/.test(key)) return changes.push([key, value, true, []]);\n // Split dashed props\n let entries = [];\n if (key.includes('-')) entries = key.split('-');\n changes.push([key, value, false, entries]);\n\n // Reset pierced props\n for (const prop in props) {\n const value = props[prop];\n if (prop.startsWith(`${key}-`)) changes.push([prop, value, false, prop.split('-')]);\n }\n });\n const memoized = {\n ...props\n };\n if (localState.memoizedProps && localState.memoizedProps.args) memoized.args = localState.memoizedProps.args;\n if (localState.memoizedProps && localState.memoizedProps.attach) memoized.attach = localState.memoizedProps.attach;\n return {\n memoized,\n changes\n };\n}\n\n// This function applies a set of changes to the instance\nfunction applyProps$1(instance, data) {\n var _instance$__r3f3, _root$getState, _instance$__r3f4;\n // Filter equals, events and reserved props\n const localState = (_instance$__r3f3 = instance.__r3f) != null ? _instance$__r3f3 : {};\n const root = localState.root;\n const rootState = (_root$getState = root == null ? void 0 : root.getState == null ? void 0 : root.getState()) != null ? _root$getState : {};\n const {\n memoized,\n changes\n } = isDiffSet(data) ? data : diffProps(instance, data);\n const prevHandlers = localState.eventCount;\n\n // Prepare memoized props\n if (instance.__r3f) instance.__r3f.memoizedProps = memoized;\n for (let i = 0; i < changes.length; i++) {\n let [key, value, isEvent, keys] = changes[i];\n let currentInstance = instance;\n let targetProp = currentInstance[key];\n\n // Revolve dashed props\n if (keys.length) {\n targetProp = keys.reduce((acc, key) => acc[key], instance);\n // If the target is atomic, it forces us to switch the root\n if (!(targetProp && targetProp.set)) {\n const [name, ...reverseEntries] = keys.reverse();\n currentInstance = reverseEntries.reverse().reduce((acc, key) => acc[key], instance);\n key = name;\n }\n }\n\n // https://github.com/mrdoob/three.js/issues/21209\n // HMR/fast-refresh relies on the ability to cancel out props, but threejs\n // has no means to do this. Hence we curate a small collection of value-classes\n // with their respective constructor/set arguments\n // For removed props, try to set default values, if possible\n if (value === DEFAULT + 'remove') {\n if (currentInstance.constructor) {\n // create a blank slate of the instance and copy the particular parameter.\n let ctor = DEFAULTS.get(currentInstance.constructor);\n if (!ctor) {\n // @ts-ignore\n ctor = new currentInstance.constructor();\n DEFAULTS.set(currentInstance.constructor, ctor);\n }\n value = ctor[key];\n } else {\n // instance does not have constructor, just set it to 0\n value = 0;\n }\n }\n\n // Deal with pointer events ...\n if (isEvent) {\n if (value) localState.handlers[key] = value;else delete localState.handlers[key];\n localState.eventCount = Object.keys(localState.handlers).length;\n }\n // Special treatment for objects with support for set/copy, and layers\n else if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof THREE.Layers)) {\n // If value is an array\n if (Array.isArray(value)) {\n if (targetProp.fromArray) targetProp.fromArray(value);else targetProp.set(...value);\n }\n // Test again target.copy(class) next ...\n else if (targetProp.copy && value && value.constructor && targetProp.constructor === value.constructor) {\n targetProp.copy(value);\n }\n // If nothing else fits, just set the single value, ignore undefined\n // https://github.com/pmndrs/react-three-fiber/issues/274\n else if (value !== undefined) {\n const isColor = targetProp instanceof THREE.Color;\n // Allow setting array scalars\n if (!isColor && targetProp.setScalar) targetProp.setScalar(value);\n // Layers have no copy function, we must therefore copy the mask property\n else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers) targetProp.mask = value.mask;\n // Otherwise just set ...\n else targetProp.set(value);\n // For versions of three which don't support THREE.ColorManagement,\n // Auto-convert sRGB colors\n // https://github.com/pmndrs/react-three-fiber/issues/344\n if (!getColorManagement() && !rootState.linear && isColor) targetProp.convertSRGBToLinear();\n }\n // Else, just overwrite the value\n } else {\n currentInstance[key] = value;\n // Auto-convert sRGB textures, for now ...\n // https://github.com/pmndrs/react-three-fiber/issues/344\n if (!rootState.linear && currentInstance[key] instanceof THREE.Texture &&\n // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n currentInstance[key].format === THREE.RGBAFormat && currentInstance[key].type === THREE.UnsignedByteType) {\n currentInstance[key].encoding = THREE.sRGBEncoding;\n }\n }\n invalidateInstance(instance);\n }\n if (localState.parent && rootState.internal && instance.raycast && prevHandlers !== localState.eventCount) {\n // Pre-emptively remove the instance from the interaction manager\n const index = rootState.internal.interaction.indexOf(instance);\n if (index > -1) rootState.internal.interaction.splice(index, 1);\n // Add the instance to the interaction manager only when it has handlers\n if (localState.eventCount) rootState.internal.interaction.push(instance);\n }\n\n // Call the update lifecycle when it is being updated, but only when it is part of the scene.\n // Skip updates to the `onUpdate` prop itself\n const isCircular = changes.length === 1 && changes[0][0] === 'onUpdate';\n if (!isCircular && changes.length && (_instance$__r3f4 = instance.__r3f) != null && _instance$__r3f4.parent) updateInstance(instance);\n return instance;\n}\nfunction invalidateInstance(instance) {\n var _instance$__r3f5, _instance$__r3f5$root;\n const state = (_instance$__r3f5 = instance.__r3f) == null ? void 0 : (_instance$__r3f5$root = _instance$__r3f5.root) == null ? void 0 : _instance$__r3f5$root.getState == null ? void 0 : _instance$__r3f5$root.getState();\n if (state && state.internal.frames === 0) state.invalidate();\n}\nfunction updateInstance(instance) {\n instance.onUpdate == null ? void 0 : instance.onUpdate(instance);\n}\nfunction updateCamera(camera, size) {\n // https://github.com/pmndrs/react-three-fiber/issues/92\n // Do not mess with the camera if it belongs to the user\n if (!camera.manual) {\n if (isOrthographicCamera(camera)) {\n camera.left = size.width / -2;\n camera.right = size.width / 2;\n camera.top = size.height / 2;\n camera.bottom = size.height / -2;\n } else {\n camera.aspect = size.width / size.height;\n }\n camera.updateProjectionMatrix();\n // https://github.com/pmndrs/react-three-fiber/issues/178\n // Update matrix world since the renderer is a frame late\n camera.updateMatrixWorld();\n }\n}\n\nfunction makeId(event) {\n return (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;\n}\n\n// https://github.com/facebook/react/tree/main/packages/react-reconciler#getcurrenteventpriority\n// Gives React a clue as to how import the current interaction is\nfunction getEventPriority() {\n var _globalScope$event;\n // Get a handle to the current global scope in window and worker contexts if able\n // https://github.com/pmndrs/react-three-fiber/pull/2493\n const globalScope = typeof self !== 'undefined' && self || typeof window !== 'undefined' && window;\n if (!globalScope) return DefaultEventPriority;\n const name = (_globalScope$event = globalScope.event) == null ? void 0 : _globalScope$event.type;\n switch (name) {\n case 'click':\n case 'contextmenu':\n case 'dblclick':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointerup':\n return DiscreteEventPriority;\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'pointerenter':\n case 'pointerleave':\n case 'wheel':\n return ContinuousEventPriority;\n default:\n return DefaultEventPriority;\n }\n}\n\n/**\n * Release pointer captures.\n * This is called by releasePointerCapture in the API, and when an object is removed.\n */\nfunction releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {\n const captureData = captures.get(obj);\n if (captureData) {\n captures.delete(obj);\n // If this was the last capturing object for this pointer\n if (captures.size === 0) {\n capturedMap.delete(pointerId);\n captureData.target.releasePointerCapture(pointerId);\n }\n }\n}\nfunction removeInteractivity(store, object) {\n const {\n internal\n } = store.getState();\n // Removes every trace of an object from the data store\n internal.interaction = internal.interaction.filter(o => o !== object);\n internal.initialHits = internal.initialHits.filter(o => o !== object);\n internal.hovered.forEach((value, key) => {\n if (value.eventObject === object || value.object === object) {\n // Clear out intersects, they are outdated by now\n internal.hovered.delete(key);\n }\n });\n internal.capturedMap.forEach((captures, pointerId) => {\n releaseInternalPointerCapture(internal.capturedMap, object, captures, pointerId);\n });\n}\nfunction createEvents(store) {\n /** Calculates delta */\n function calculateDistance(event) {\n const {\n internal\n } = store.getState();\n const dx = event.offsetX - internal.initialClick[0];\n const dy = event.offsetY - internal.initialClick[1];\n return Math.round(Math.sqrt(dx * dx + dy * dy));\n }\n\n /** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */\n function filterPointerEvents(objects) {\n return objects.filter(obj => ['Move', 'Over', 'Enter', 'Out', 'Leave'].some(name => {\n var _r3f;\n return (_r3f = obj.__r3f) == null ? void 0 : _r3f.handlers['onPointer' + name];\n }));\n }\n function intersect(event, filter) {\n const state = store.getState();\n const duplicates = new Set();\n const intersections = [];\n // Allow callers to eliminate event objects\n const eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction;\n // Reset all raycaster cameras to undefined\n for (let i = 0; i < eventsObjects.length; i++) {\n const state = getRootState(eventsObjects[i]);\n if (state) {\n state.raycaster.camera = undefined;\n }\n }\n if (!state.previousRoot) {\n // Make sure root-level pointer and ray are set up\n state.events.compute == null ? void 0 : state.events.compute(event, state);\n }\n function handleRaycast(obj) {\n const state = getRootState(obj);\n // Skip event handling when noEvents is set, or when the raycasters camera is null\n if (!state || !state.events.enabled || state.raycaster.camera === null) return [];\n\n // When the camera is undefined we have to call the event layers update function\n if (state.raycaster.camera === undefined) {\n var _state$previousRoot;\n state.events.compute == null ? void 0 : state.events.compute(event, state, (_state$previousRoot = state.previousRoot) == null ? void 0 : _state$previousRoot.getState());\n // If the camera is still undefined we have to skip this layer entirely\n if (state.raycaster.camera === undefined) state.raycaster.camera = null;\n }\n\n // Intersect object by object\n return state.raycaster.camera ? state.raycaster.intersectObject(obj, true) : [];\n }\n\n // Collect events\n let hits = eventsObjects\n // Intersect objects\n .flatMap(handleRaycast)\n // Sort by event priority and distance\n .sort((a, b) => {\n const aState = getRootState(a.object);\n const bState = getRootState(b.object);\n if (!aState || !bState) return a.distance - b.distance;\n return bState.events.priority - aState.events.priority || a.distance - b.distance;\n })\n // Filter out duplicates\n .filter(item => {\n const id = makeId(item);\n if (duplicates.has(id)) return false;\n duplicates.add(id);\n return true;\n });\n\n // https://github.com/mrdoob/three.js/issues/16031\n // Allow custom userland intersect sort order, this likely only makes sense on the root filter\n if (state.events.filter) hits = state.events.filter(hits, state);\n\n // Bubble up the events, find the event source (eventObject)\n for (const hit of hits) {\n let eventObject = hit.object;\n // Bubble event up\n while (eventObject) {\n var _r3f2;\n if ((_r3f2 = eventObject.__r3f) != null && _r3f2.eventCount) intersections.push({\n ...hit,\n eventObject\n });\n eventObject = eventObject.parent;\n }\n }\n\n // If the interaction is captured, make all capturing targets part of the intersect.\n if ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) {\n for (let captureData of state.internal.capturedMap.get(event.pointerId).values()) {\n if (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection);\n }\n }\n return intersections;\n }\n\n /** Handles intersections by forwarding them to handlers */\n function handleIntersects(intersections, event, delta, callback) {\n const rootState = store.getState();\n\n // If anything has been found, forward it to the event listeners\n if (intersections.length) {\n const localState = {\n stopped: false\n };\n for (const hit of intersections) {\n const state = getRootState(hit.object) || rootState;\n const {\n raycaster,\n pointer,\n camera,\n internal\n } = state;\n const unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera);\n const hasPointerCapture = id => {\n var _internal$capturedMap, _internal$capturedMap2;\n return (_internal$capturedMap = (_internal$capturedMap2 = internal.capturedMap.get(id)) == null ? void 0 : _internal$capturedMap2.has(hit.eventObject)) != null ? _internal$capturedMap : false;\n };\n const setPointerCapture = id => {\n const captureData = {\n intersection: hit,\n target: event.target\n };\n if (internal.capturedMap.has(id)) {\n // if the pointerId was previously captured, we add the hit to the\n // event capturedMap.\n internal.capturedMap.get(id).set(hit.eventObject, captureData);\n } else {\n // if the pointerId was not previously captured, we create a map\n // containing the hitObject, and the hit. hitObject is used for\n // faster access.\n internal.capturedMap.set(id, new Map([[hit.eventObject, captureData]]));\n }\n event.target.setPointerCapture(id);\n };\n const releasePointerCapture = id => {\n const captures = internal.capturedMap.get(id);\n if (captures) {\n releaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id);\n }\n };\n\n // Add native event props\n let extractEventProps = {};\n // This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return \"own\" properties; nor Object.getPrototypeOf(event) as that *doesn't* return \"own\" properties, only inherited ones.\n for (let prop in event) {\n let property = event[prop];\n // Only copy over atomics, leave functions alone as these should be\n // called as event.nativeEvent.fn()\n if (typeof property !== 'function') extractEventProps[prop] = property;\n }\n let raycastEvent = {\n ...hit,\n ...extractEventProps,\n pointer,\n intersections,\n stopped: localState.stopped,\n delta,\n unprojectedPoint,\n ray: raycaster.ray,\n camera: camera,\n // Hijack stopPropagation, which just sets a flag\n stopPropagation() {\n // https://github.com/pmndrs/react-three-fiber/issues/596\n // Events are not allowed to stop propagation if the pointer has been captured\n const capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId);\n\n // We only authorize stopPropagation...\n if (\n // ...if this pointer hasn't been captured\n !capturesForPointer ||\n // ... or if the hit object is capturing the pointer\n capturesForPointer.has(hit.eventObject)) {\n raycastEvent.stopped = localState.stopped = true;\n // Propagation is stopped, remove all other hover records\n // An event handler is only allowed to flush other handlers if it is hovered itself\n if (internal.hovered.size && Array.from(internal.hovered.values()).find(i => i.eventObject === hit.eventObject)) {\n // Objects cannot flush out higher up objects that have already caught the event\n const higher = intersections.slice(0, intersections.indexOf(hit));\n cancelPointer([...higher, hit]);\n }\n }\n },\n // there should be a distinction between target and currentTarget\n target: {\n hasPointerCapture,\n setPointerCapture,\n releasePointerCapture\n },\n currentTarget: {\n hasPointerCapture,\n setPointerCapture,\n releasePointerCapture\n },\n nativeEvent: event\n };\n\n // Call subscribers\n callback(raycastEvent);\n // Event bubbling may be interrupted by stopPropagation\n if (localState.stopped === true) break;\n }\n }\n return intersections;\n }\n function cancelPointer(intersections) {\n const {\n internal\n } = store.getState();\n for (const hoveredObj of internal.hovered.values()) {\n // When no objects were hit or the the hovered object wasn't found underneath the cursor\n // we call onPointerOut and delete the object from the hovered-elements map\n if (!intersections.length || !intersections.find(hit => hit.object === hoveredObj.object && hit.index === hoveredObj.index && hit.instanceId === hoveredObj.instanceId)) {\n const eventObject = hoveredObj.eventObject;\n const instance = eventObject.__r3f;\n const handlers = instance == null ? void 0 : instance.handlers;\n internal.hovered.delete(makeId(hoveredObj));\n if (instance != null && instance.eventCount) {\n // Clear out intersects, they are outdated by now\n const data = {\n ...hoveredObj,\n intersections\n };\n handlers.onPointerOut == null ? void 0 : handlers.onPointerOut(data);\n handlers.onPointerLeave == null ? void 0 : handlers.onPointerLeave(data);\n }\n }\n }\n }\n function pointerMissed(event, objects) {\n for (let i = 0; i < objects.length; i++) {\n const instance = objects[i].__r3f;\n instance == null ? void 0 : instance.handlers.onPointerMissed == null ? void 0 : instance.handlers.onPointerMissed(event);\n }\n }\n function handlePointer(name) {\n // Deal with cancelation\n switch (name) {\n case 'onPointerLeave':\n case 'onPointerCancel':\n return () => cancelPointer([]);\n case 'onLostPointerCapture':\n return event => {\n const {\n internal\n } = store.getState();\n if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {\n // If the object event interface had onLostPointerCapture, we'd call it here on every\n // object that's getting removed. We call it on the next frame because onLostPointerCapture\n // fires before onPointerUp. Otherwise pointerUp would never be called if the event didn't\n // happen in the object it originated from, leaving components in a in-between state.\n requestAnimationFrame(() => {\n // Only release if pointer-up didn't do it already\n if (internal.capturedMap.has(event.pointerId)) {\n internal.capturedMap.delete(event.pointerId);\n cancelPointer([]);\n }\n });\n }\n };\n }\n\n // Any other pointer goes here ...\n return function handleEvent(event) {\n const {\n onPointerMissed,\n internal\n } = store.getState();\n\n // prepareRay(event)\n internal.lastEvent.current = event;\n\n // Get fresh intersects\n const isPointerMove = name === 'onPointerMove';\n const isClickEvent = name === 'onClick' || name === 'onContextMenu' || name === 'onDoubleClick';\n const filter = isPointerMove ? filterPointerEvents : undefined;\n const hits = intersect(event, filter);\n const delta = isClickEvent ? calculateDistance(event) : 0;\n\n // Save initial coordinates on pointer-down\n if (name === 'onPointerDown') {\n internal.initialClick = [event.offsetX, event.offsetY];\n internal.initialHits = hits.map(hit => hit.eventObject);\n }\n\n // If a click yields no results, pass it back to the user as a miss\n // Missed events have to come first in order to establish user-land side-effect clean up\n if (isClickEvent && !hits.length) {\n if (delta <= 2) {\n pointerMissed(event, internal.interaction);\n if (onPointerMissed) onPointerMissed(event);\n }\n }\n // Take care of unhover\n if (isPointerMove) cancelPointer(hits);\n function onIntersect(data) {\n const eventObject = data.eventObject;\n const instance = eventObject.__r3f;\n const handlers = instance == null ? void 0 : instance.handlers;\n\n // Check presence of handlers\n if (!(instance != null && instance.eventCount)) return;\n\n /*\n MAYBE TODO, DELETE IF NOT: \n Check if the object is captured, captured events should not have intersects running in parallel\n But wouldn't it be better to just replace capturedMap with a single entry?\n Also, are we OK with straight up making picking up multiple objects impossible?\n \n const pointerId = (data as ThreeEvent).pointerId \n if (pointerId !== undefined) {\n const capturedMeshSet = internal.capturedMap.get(pointerId)\n if (capturedMeshSet) {\n const captured = capturedMeshSet.get(eventObject)\n if (captured && captured.localState.stopped) return\n }\n }*/\n\n if (isPointerMove) {\n // Move event ...\n if (handlers.onPointerOver || handlers.onPointerEnter || handlers.onPointerOut || handlers.onPointerLeave) {\n // When enter or out is present take care of hover-state\n const id = makeId(data);\n const hoveredItem = internal.hovered.get(id);\n if (!hoveredItem) {\n // If the object wasn't previously hovered, book it and call its handler\n internal.hovered.set(id, data);\n handlers.onPointerOver == null ? void 0 : handlers.onPointerOver(data);\n handlers.onPointerEnter == null ? void 0 : handlers.onPointerEnter(data);\n } else if (hoveredItem.stopped) {\n // If the object was previously hovered and stopped, we shouldn't allow other items to proceed\n data.stopPropagation();\n }\n }\n // Call mouse move\n handlers.onPointerMove == null ? void 0 : handlers.onPointerMove(data);\n } else {\n // All other events ...\n const handler = handlers[name];\n if (handler) {\n // Forward all events back to their respective handlers with the exception of click events,\n // which must use the initial target\n if (!isClickEvent || internal.initialHits.includes(eventObject)) {\n // Missed events have to come first\n pointerMissed(event, internal.interaction.filter(object => !internal.initialHits.includes(object)));\n // Now call the handler\n handler(data);\n }\n } else {\n // Trigger onPointerMissed on all elements that have pointer over/out handlers, but not click and weren't hit\n if (isClickEvent && internal.initialHits.includes(eventObject)) {\n pointerMissed(event, internal.interaction.filter(object => !internal.initialHits.includes(object)));\n }\n }\n }\n }\n handleIntersects(hits, event, delta, onIntersect);\n };\n }\n return {\n handlePointer\n };\n}\n\n// Keys that shouldn't be copied between R3F stores\nconst privateKeys = ['set', 'get', 'setSize', 'setFrameloop', 'setDpr', 'events', 'invalidate', 'advance', 'size', 'viewport'];\nconst isRenderer = def => !!(def != null && def.render);\nconst context = /*#__PURE__*/React.createContext(null);\nconst createStore = (invalidate, advance) => {\n const rootState = create((set, get) => {\n const position = new THREE.Vector3();\n const defaultTarget = new THREE.Vector3();\n const tempTarget = new THREE.Vector3();\n function getCurrentViewport(camera = get().camera, target = defaultTarget, size = get().size) {\n const {\n width,\n height,\n top,\n left\n } = size;\n const aspect = width / height;\n if (target instanceof THREE.Vector3) tempTarget.copy(target);else tempTarget.set(...target);\n const distance = camera.getWorldPosition(position).distanceTo(tempTarget);\n if (isOrthographicCamera(camera)) {\n return {\n width: width / camera.zoom,\n height: height / camera.zoom,\n top,\n left,\n factor: 1,\n distance,\n aspect\n };\n } else {\n const fov = camera.fov * Math.PI / 180; // convert vertical fov to radians\n const h = 2 * Math.tan(fov / 2) * distance; // visible height\n const w = h * (width / height);\n return {\n width: w,\n height: h,\n top,\n left,\n factor: width / w,\n distance,\n aspect\n };\n }\n }\n let performanceTimeout = undefined;\n const setPerformanceCurrent = current => set(state => ({\n performance: {\n ...state.performance,\n current\n }\n }));\n const pointer = new THREE.Vector2();\n const rootState = {\n set,\n get,\n // Mock objects that have to be configured\n gl: null,\n camera: null,\n raycaster: null,\n events: {\n priority: 1,\n enabled: true,\n connected: false\n },\n xr: null,\n scene: null,\n invalidate: (frames = 1) => invalidate(get(), frames),\n advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, get()),\n legacy: false,\n linear: false,\n flat: false,\n controls: null,\n clock: new THREE.Clock(),\n pointer,\n mouse: pointer,\n frameloop: 'always',\n onPointerMissed: undefined,\n performance: {\n current: 1,\n min: 0.5,\n max: 1,\n debounce: 200,\n regress: () => {\n const state = get();\n // Clear timeout\n if (performanceTimeout) clearTimeout(performanceTimeout);\n // Set lower bound performance\n if (state.performance.current !== state.performance.min) setPerformanceCurrent(state.performance.min);\n // Go back to upper bound performance after a while unless something regresses meanwhile\n performanceTimeout = setTimeout(() => setPerformanceCurrent(get().performance.max), state.performance.debounce);\n }\n },\n size: {\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n updateStyle: false\n },\n viewport: {\n initialDpr: 0,\n dpr: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n aspect: 0,\n distance: 0,\n factor: 0,\n getCurrentViewport\n },\n setEvents: events => set(state => ({\n ...state,\n events: {\n ...state.events,\n ...events\n }\n })),\n setSize: (width, height, updateStyle, top, left) => {\n const camera = get().camera;\n const size = {\n width,\n height,\n top: top || 0,\n left: left || 0,\n updateStyle\n };\n set(state => ({\n size,\n viewport: {\n ...state.viewport,\n ...getCurrentViewport(camera, defaultTarget, size)\n }\n }));\n },\n setDpr: dpr => set(state => {\n const resolved = calculateDpr(dpr);\n return {\n viewport: {\n ...state.viewport,\n dpr: resolved,\n initialDpr: state.viewport.initialDpr || resolved\n }\n };\n }),\n setFrameloop: (frameloop = 'always') => {\n const clock = get().clock;\n\n // if frameloop === \"never\" clock.elapsedTime is updated using advance(timestamp)\n clock.stop();\n clock.elapsedTime = 0;\n if (frameloop !== 'never') {\n clock.start();\n clock.elapsedTime = 0;\n }\n set(() => ({\n frameloop\n }));\n },\n previousRoot: undefined,\n internal: {\n active: false,\n priority: 0,\n frames: 0,\n lastEvent: /*#__PURE__*/React.createRef(),\n interaction: [],\n hovered: new Map(),\n subscribers: [],\n initialClick: [0, 0],\n initialHits: [],\n capturedMap: new Map(),\n subscribe: (ref, priority, store) => {\n const internal = get().internal;\n // If this subscription was given a priority, it takes rendering into its own hands\n // For that reason we switch off automatic rendering and increase the manual flag\n // As long as this flag is positive there can be no internal rendering at all\n // because there could be multiple render subscriptions\n internal.priority = internal.priority + (priority > 0 ? 1 : 0);\n internal.subscribers.push({\n ref,\n priority,\n store\n });\n // Register subscriber and sort layers from lowest to highest, meaning,\n // highest priority renders last (on top of the other frames)\n internal.subscribers = internal.subscribers.sort((a, b) => a.priority - b.priority);\n return () => {\n const internal = get().internal;\n if (internal != null && internal.subscribers) {\n // Decrease manual flag if this subscription had a priority\n internal.priority = internal.priority - (priority > 0 ? 1 : 0);\n // Remove subscriber from list\n internal.subscribers = internal.subscribers.filter(s => s.ref !== ref);\n }\n };\n }\n }\n };\n return rootState;\n });\n const state = rootState.getState();\n let oldSize = state.size;\n let oldDpr = state.viewport.dpr;\n let oldCamera = state.camera;\n rootState.subscribe(() => {\n const {\n camera,\n size,\n viewport,\n gl,\n set\n } = rootState.getState();\n\n // Resize camera and renderer on changes to size and pixelratio\n if (size !== oldSize || viewport.dpr !== oldDpr) {\n var _size$updateStyle;\n oldSize = size;\n oldDpr = viewport.dpr;\n // Update camera & renderer\n updateCamera(camera, size);\n gl.setPixelRatio(viewport.dpr);\n const updateStyle = (_size$updateStyle = size.updateStyle) != null ? _size$updateStyle : typeof HTMLCanvasElement !== 'undefined' && gl.domElement instanceof HTMLCanvasElement;\n gl.setSize(size.width, size.height, updateStyle);\n }\n\n // Update viewport once the camera changes\n if (camera !== oldCamera) {\n oldCamera = camera;\n // Update viewport\n set(state => ({\n viewport: {\n ...state.viewport,\n ...state.viewport.getCurrentViewport(camera)\n }\n }));\n }\n });\n\n // Invalidate on any change\n rootState.subscribe(state => invalidate(state));\n\n // Return root state\n return rootState;\n};\n\nfunction createSubs(callback, subs) {\n const sub = {\n callback\n };\n subs.add(sub);\n return () => void subs.delete(sub);\n}\nlet i;\nlet globalEffects = new Set();\nlet globalAfterEffects = new Set();\nlet globalTailEffects = new Set();\n\n/**\n * Adds a global render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect\n */\nconst addEffect = callback => createSubs(callback, globalEffects);\n\n/**\n * Adds a global after-render callback which is called each frame.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect\n */\nconst addAfterEffect = callback => createSubs(callback, globalAfterEffects);\n\n/**\n * Adds a global callback which is called when rendering stops.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail\n */\nconst addTail = callback => createSubs(callback, globalTailEffects);\nfunction run(effects, timestamp) {\n if (!effects.size) return;\n for (const {\n callback\n } of effects.values()) {\n callback(timestamp);\n }\n}\nfunction flushGlobalEffects(type, timestamp) {\n switch (type) {\n case 'before':\n return run(globalEffects, timestamp);\n case 'after':\n return run(globalAfterEffects, timestamp);\n case 'tail':\n return run(globalTailEffects, timestamp);\n }\n}\nlet subscribers;\nlet subscription;\nfunction render$1(timestamp, state, frame) {\n // Run local effects\n let delta = state.clock.getDelta();\n // In frameloop='never' mode, clock times are updated using the provided timestamp\n if (state.frameloop === 'never' && typeof timestamp === 'number') {\n delta = timestamp - state.clock.elapsedTime;\n state.clock.oldTime = state.clock.elapsedTime;\n state.clock.elapsedTime = timestamp;\n }\n // Call subscribers (useFrame)\n subscribers = state.internal.subscribers;\n for (i = 0; i < subscribers.length; i++) {\n subscription = subscribers[i];\n subscription.ref.current(subscription.store.getState(), delta, frame);\n }\n // Render content\n if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera);\n // Decrease frame count\n state.internal.frames = Math.max(0, state.internal.frames - 1);\n return state.frameloop === 'always' ? 1 : state.internal.frames;\n}\nfunction createLoop(roots) {\n let running = false;\n let repeat;\n let frame;\n let state;\n function loop(timestamp) {\n frame = requestAnimationFrame(loop);\n running = true;\n repeat = 0;\n\n // Run effects\n flushGlobalEffects('before', timestamp);\n\n // Render all roots\n for (const root of roots.values()) {\n var _state$gl$xr;\n state = root.store.getState();\n // If the frameloop is invalidated, do not run another frame\n if (state.internal.active && (state.frameloop === 'always' || state.internal.frames > 0) && !((_state$gl$xr = state.gl.xr) != null && _state$gl$xr.isPresenting)) {\n repeat += render$1(timestamp, state);\n }\n }\n\n // Run after-effects\n flushGlobalEffects('after', timestamp);\n\n // Stop the loop if nothing invalidates it\n if (repeat === 0) {\n // Tail call effects, they are called when rendering stops\n flushGlobalEffects('tail', timestamp);\n\n // Flag end of operation\n running = false;\n return cancelAnimationFrame(frame);\n }\n }\n function invalidate(state, frames = 1) {\n var _state$gl$xr2;\n if (!state) return roots.forEach(root => invalidate(root.store.getState()), frames);\n if ((_state$gl$xr2 = state.gl.xr) != null && _state$gl$xr2.isPresenting || !state.internal.active || state.frameloop === 'never') return;\n // Increase frames, do not go higher than 60\n state.internal.frames = Math.min(60, state.internal.frames + frames);\n // If the render-loop isn't active, start it\n if (!running) {\n running = true;\n requestAnimationFrame(loop);\n }\n }\n function advance(timestamp, runGlobalEffects = true, state, frame) {\n if (runGlobalEffects) flushGlobalEffects('before', timestamp);\n if (!state) for (const root of roots.values()) render$1(timestamp, root.store.getState());else render$1(timestamp, state, frame);\n if (runGlobalEffects) flushGlobalEffects('after', timestamp);\n }\n return {\n loop,\n /**\n * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate\n */\n invalidate,\n /**\n * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop=\"never\"`.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance\n */\n advance\n };\n}\n\n/**\n * Exposes an object's {@link LocalState}.\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle\n *\n * **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions.\n */\nfunction useInstanceHandle(ref) {\n const instance = React.useRef(null);\n useIsomorphicLayoutEffect(() => void (instance.current = ref.current.__r3f), [ref]);\n return instance;\n}\nfunction useStore() {\n const store = React.useContext(context);\n if (!store) throw new Error('R3F: Hooks can only be used within the Canvas component!');\n return store;\n}\n\n/**\n * Accesses R3F's internal state, containing renderer, canvas, scene, etc.\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree\n */\nfunction useThree(selector = state => state, equalityFn) {\n return useStore()(selector, equalityFn);\n}\n\n/**\n * Executes a callback before render in a shared frame loop.\n * Can order effects with render priority or manually render with a positive priority.\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useframe\n */\nfunction useFrame(callback, renderPriority = 0) {\n const store = useStore();\n const subscribe = store.getState().internal.subscribe;\n // Memoize ref\n const ref = useMutableCallback(callback);\n // Subscribe on mount, unsubscribe on unmount\n useIsomorphicLayoutEffect(() => subscribe(ref, renderPriority, store), [renderPriority, subscribe, store]);\n return null;\n}\n\n/**\n * Returns a node graph of an object with named nodes & materials.\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph\n */\nfunction useGraph(object) {\n return React.useMemo(() => buildGraph(object), [object]);\n}\nfunction loadingFn(extensions, onProgress) {\n return function (Proto, ...input) {\n // Construct new loader and run extensions\n const loader = new Proto();\n if (extensions) extensions(loader);\n // Go through the urls and load them\n return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {\n if (data.scene) Object.assign(data, buildGraph(data.scene));\n res(data);\n }, onProgress, error => reject(new Error(`Could not load ${input}: ${error.message})`))))));\n };\n}\n\n/**\n * Synchronously loads and caches assets with a three loader.\n *\n * Note: this hook's caller must be wrapped with `React.Suspense`\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader\n */\nfunction useLoader(Proto, input, extensions, onProgress) {\n // Use suspense to load async assets\n const keys = Array.isArray(input) ? input : [input];\n const results = suspend(loadingFn(extensions, onProgress), [Proto, ...keys], {\n equal: is.equ\n });\n // Return the object/s\n return Array.isArray(input) ? results : results[0];\n}\n\n/**\n * Preloads an asset into cache as a side-effect.\n */\nuseLoader.preload = function (Proto, input, extensions) {\n const keys = Array.isArray(input) ? input : [input];\n return preload(loadingFn(extensions), [Proto, ...keys]);\n};\n\n/**\n * Removes a loaded asset from cache.\n */\nuseLoader.clear = function (Proto, input) {\n const keys = Array.isArray(input) ? input : [input];\n return clear([Proto, ...keys]);\n};\n\nconst roots = new Map();\nconst {\n invalidate,\n advance\n} = createLoop(roots);\nconst {\n reconciler,\n applyProps\n} = createRenderer(roots, getEventPriority);\nconst shallowLoose = {\n objects: 'shallow',\n strict: false\n};\nconst createRendererInstance = (gl, canvas) => {\n const customRenderer = typeof gl === 'function' ? gl(canvas) : gl;\n if (isRenderer(customRenderer)) return customRenderer;else return new THREE.WebGLRenderer({\n powerPreference: 'high-performance',\n canvas: canvas,\n antialias: true,\n alpha: true,\n ...gl\n });\n};\nfunction computeInitialSize(canvas, defaultSize) {\n if (defaultSize) return defaultSize;\n if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) {\n const {\n width,\n height,\n top,\n left\n } = canvas.parentElement.getBoundingClientRect();\n return {\n width,\n height,\n top,\n left\n };\n } else if (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return {\n width: canvas.width,\n height: canvas.height,\n top: 0,\n left: 0\n };\n }\n return {\n width: 0,\n height: 0,\n top: 0,\n left: 0\n };\n}\nfunction createRoot(canvas) {\n // Check against mistaken use of createRoot\n const prevRoot = roots.get(canvas);\n const prevFiber = prevRoot == null ? void 0 : prevRoot.fiber;\n const prevStore = prevRoot == null ? void 0 : prevRoot.store;\n if (prevRoot) console.warn('R3F.createRoot should only be called once!');\n\n // Report when an error was detected in a previous render\n // https://github.com/pmndrs/react-three-fiber/pull/2261\n const logRecoverableError = typeof reportError === 'function' ?\n // In modern browsers, reportError will dispatch an error event,\n // emulating an uncaught JavaScript error.\n reportError :\n // In older browsers and test environments, fallback to console.error.\n console.error;\n\n // Create store\n const store = prevStore || createStore(invalidate, advance);\n // Create renderer\n const fiber = prevFiber || reconciler.createContainer(store, ConcurrentRoot, null, false, null, '', logRecoverableError, null);\n // Map it\n if (!prevRoot) roots.set(canvas, {\n fiber,\n store\n });\n\n // Locals\n let onCreated;\n let configured = false;\n let lastCamera;\n return {\n configure(props = {}) {\n let {\n gl: glConfig,\n size: propsSize,\n scene: sceneOptions,\n events,\n onCreated: onCreatedCallback,\n shadows = false,\n linear = false,\n flat = false,\n legacy = false,\n orthographic = false,\n frameloop = 'always',\n dpr = [1, 2],\n performance,\n raycaster: raycastOptions,\n camera: cameraOptions,\n onPointerMissed\n } = props;\n let state = store.getState();\n\n // Set up renderer (one time only!)\n let gl = state.gl;\n if (!state.gl) state.set({\n gl: gl = createRendererInstance(glConfig, canvas)\n });\n\n // Set up raycaster (one time only!)\n let raycaster = state.raycaster;\n if (!raycaster) state.set({\n raycaster: raycaster = new THREE.Raycaster()\n });\n\n // Set raycaster options\n const {\n params,\n ...options\n } = raycastOptions || {};\n if (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, {\n ...options\n });\n if (!is.equ(params, raycaster.params, shallowLoose)) applyProps(raycaster, {\n params: {\n ...raycaster.params,\n ...params\n }\n });\n\n // Create default camera, don't overwrite any user-set state\n if (!state.camera || state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose)) {\n lastCamera = cameraOptions;\n const isCamera = cameraOptions instanceof THREE.Camera;\n const camera = isCamera ? cameraOptions : orthographic ? new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000) : new THREE.PerspectiveCamera(75, 0, 0.1, 1000);\n if (!isCamera) {\n camera.position.z = 5;\n if (cameraOptions) applyProps(camera, cameraOptions);\n // Always look at center by default\n if (!state.camera && !(cameraOptions != null && cameraOptions.rotation)) camera.lookAt(0, 0, 0);\n }\n state.set({\n camera\n });\n }\n\n // Set up scene (one time only!)\n if (!state.scene) {\n let scene;\n if (sceneOptions instanceof THREE.Scene) {\n scene = sceneOptions;\n } else {\n scene = new THREE.Scene();\n if (sceneOptions) applyProps(scene, sceneOptions);\n }\n state.set({\n scene: prepare(scene)\n });\n }\n\n // Set up XR (one time only!)\n if (!state.xr) {\n // Handle frame behavior in WebXR\n const handleXRFrame = (timestamp, frame) => {\n const state = store.getState();\n if (state.frameloop === 'never') return;\n advance(timestamp, true, state, frame);\n };\n\n // Toggle render switching on session\n const handleSessionChange = () => {\n const state = store.getState();\n state.gl.xr.enabled = state.gl.xr.isPresenting;\n state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);\n if (!state.gl.xr.isPresenting) invalidate(state);\n };\n\n // WebXR session manager\n const xr = {\n connect() {\n const gl = store.getState().gl;\n gl.xr.addEventListener('sessionstart', handleSessionChange);\n gl.xr.addEventListener('sessionend', handleSessionChange);\n },\n disconnect() {\n const gl = store.getState().gl;\n gl.xr.removeEventListener('sessionstart', handleSessionChange);\n gl.xr.removeEventListener('sessionend', handleSessionChange);\n }\n };\n\n // Subscribe to WebXR session events\n if (gl.xr) xr.connect();\n state.set({\n xr\n });\n }\n\n // Set shadowmap\n if (gl.shadowMap) {\n const oldEnabled = gl.shadowMap.enabled;\n const oldType = gl.shadowMap.type;\n gl.shadowMap.enabled = !!shadows;\n if (is.boo(shadows)) {\n gl.shadowMap.type = THREE.PCFSoftShadowMap;\n } else if (is.str(shadows)) {\n var _types$shadows;\n const types = {\n basic: THREE.BasicShadowMap,\n percentage: THREE.PCFShadowMap,\n soft: THREE.PCFSoftShadowMap,\n variance: THREE.VSMShadowMap\n };\n gl.shadowMap.type = (_types$shadows = types[shadows]) != null ? _types$shadows : THREE.PCFSoftShadowMap;\n } else if (is.obj(shadows)) {\n Object.assign(gl.shadowMap, shadows);\n }\n if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type) gl.shadowMap.needsUpdate = true;\n }\n\n // Safely set color management if available.\n // Avoid accessing THREE.ColorManagement to play nice with older versions\n const ColorManagement = getColorManagement();\n if (ColorManagement) {\n if ('enabled' in ColorManagement) ColorManagement.enabled = !legacy;else if ('legacyMode' in ColorManagement) ColorManagement.legacyMode = legacy;\n }\n const outputEncoding = linear ? THREE.LinearEncoding : THREE.sRGBEncoding;\n const toneMapping = flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping;\n if (gl.outputEncoding !== outputEncoding) gl.outputEncoding = outputEncoding;\n if (gl.toneMapping !== toneMapping) gl.toneMapping = toneMapping;\n\n // Update color management state\n if (state.legacy !== legacy) state.set(() => ({\n legacy\n }));\n if (state.linear !== linear) state.set(() => ({\n linear\n }));\n if (state.flat !== flat) state.set(() => ({\n flat\n }));\n\n // Set gl props\n if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, gl, shallowLoose)) applyProps(gl, glConfig);\n // Store events internally\n if (events && !state.events.handlers) state.set({\n events: events(store)\n });\n // Check size, allow it to take on container bounds initially\n const size = computeInitialSize(canvas, propsSize);\n if (!is.equ(size, state.size, shallowLoose)) {\n state.setSize(size.width, size.height, size.updateStyle, size.top, size.left);\n }\n // Check pixelratio\n if (dpr && state.viewport.dpr !== calculateDpr(dpr)) state.setDpr(dpr);\n // Check frameloop\n if (state.frameloop !== frameloop) state.setFrameloop(frameloop);\n // Check pointer missed\n if (!state.onPointerMissed) state.set({\n onPointerMissed\n });\n // Check performance\n if (performance && !is.equ(performance, state.performance, shallowLoose)) state.set(state => ({\n performance: {\n ...state.performance,\n ...performance\n }\n }));\n\n // Set locals\n onCreated = onCreatedCallback;\n configured = true;\n return this;\n },\n render(children) {\n // The root has to be configured before it can be rendered\n if (!configured) this.configure();\n reconciler.updateContainer( /*#__PURE__*/React.createElement(Provider, {\n store: store,\n children: children,\n onCreated: onCreated,\n rootElement: canvas\n }), fiber, null, () => undefined);\n return store;\n },\n unmount() {\n unmountComponentAtNode(canvas);\n }\n };\n}\nfunction render(children, canvas, config) {\n console.warn('R3F.render is no longer supported in React 18. Use createRoot instead!');\n const root = createRoot(canvas);\n root.configure(config);\n return root.render(children);\n}\nfunction Provider({\n store,\n children,\n onCreated,\n rootElement\n}) {\n useIsomorphicLayoutEffect(() => {\n const state = store.getState();\n // Flag the canvas active, rendering will now begin\n state.set(state => ({\n internal: {\n ...state.internal,\n active: true\n }\n }));\n // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered\n if (onCreated) onCreated(state);\n // Connect events to the targets parent, this is done to ensure events are registered on\n // a shared target, and not on the canvas itself\n if (!store.getState().events.connected) state.events.connect == null ? void 0 : state.events.connect(rootElement);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: store\n }, children);\n}\nfunction unmountComponentAtNode(canvas, callback) {\n const root = roots.get(canvas);\n const fiber = root == null ? void 0 : root.fiber;\n if (fiber) {\n const state = root == null ? void 0 : root.store.getState();\n if (state) state.internal.active = false;\n reconciler.updateContainer(null, fiber, null, () => {\n if (state) {\n setTimeout(() => {\n try {\n var _state$gl, _state$gl$renderLists, _state$gl2, _state$gl3;\n state.events.disconnect == null ? void 0 : state.events.disconnect();\n (_state$gl = state.gl) == null ? void 0 : (_state$gl$renderLists = _state$gl.renderLists) == null ? void 0 : _state$gl$renderLists.dispose == null ? void 0 : _state$gl$renderLists.dispose();\n (_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();\n if ((_state$gl3 = state.gl) != null && _state$gl3.xr) state.xr.disconnect();\n dispose(state);\n roots.delete(canvas);\n if (callback) callback(canvas);\n } catch (e) {\n /* ... */\n }\n }, 500);\n }\n });\n }\n}\nfunction createPortal(children, container, state) {\n return /*#__PURE__*/React.createElement(Portal, {\n key: container.uuid,\n children: children,\n container: container,\n state: state\n });\n}\nfunction Portal({\n state = {},\n children,\n container\n}) {\n /** This has to be a component because it would not be able to call useThree/useStore otherwise since\n * if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger\n * the \"R3F hooks can only be used within the Canvas component!\" warning:\n * \n * {createPortal(...)} */\n const {\n events,\n size,\n ...rest\n } = state;\n const previousRoot = useStore();\n const [raycaster] = React.useState(() => new THREE.Raycaster());\n const [pointer] = React.useState(() => new THREE.Vector2());\n const inject = React.useCallback((rootState, injectState) => {\n const intersect = {\n ...rootState\n }; // all prev state props\n\n // Only the fields of \"rootState\" that do not differ from injectState\n // Some props should be off-limits\n // Otherwise filter out the props that are different and let the inject layer take precedence\n Object.keys(rootState).forEach(key => {\n if (\n // Some props should be off-limits\n privateKeys.includes(key) ||\n // Otherwise filter out the props that are different and let the inject layer take precedence\n // Unless the inject layer props is undefined, then we keep the root layer\n rootState[key] !== injectState[key] && injectState[key]) {\n delete intersect[key];\n }\n });\n let viewport = undefined;\n if (injectState && size) {\n const camera = injectState.camera;\n // Calculate the override viewport, if present\n viewport = rootState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size);\n // Update the portal camera, if it differs from the previous layer\n if (camera !== rootState.camera) updateCamera(camera, size);\n }\n return {\n // The intersect consists of the previous root state\n ...intersect,\n // Portals have their own scene, which forms the root, a raycaster and a pointer\n scene: container,\n raycaster,\n pointer,\n mouse: pointer,\n // Their previous root is the layer before it\n previousRoot,\n // Events, size and viewport can be overridden by the inject layer\n events: {\n ...rootState.events,\n ...(injectState == null ? void 0 : injectState.events),\n ...events\n },\n size: {\n ...rootState.size,\n ...size\n },\n viewport: {\n ...rootState.viewport,\n ...viewport\n },\n ...rest\n };\n }, [state]);\n const [usePortalStore] = React.useState(() => {\n // Create a mirrored store, based on the previous root with a few overrides ...\n const previousState = previousRoot.getState();\n const store = create((set, get) => ({\n ...previousState,\n scene: container,\n raycaster,\n pointer,\n mouse: pointer,\n previousRoot,\n events: {\n ...previousState.events,\n ...events\n },\n size: {\n ...previousState.size,\n ...size\n },\n ...rest,\n // Set and get refer to this root-state\n set,\n get,\n // Layers are allowed to override events\n setEvents: events => set(state => ({\n ...state,\n events: {\n ...state.events,\n ...events\n }\n }))\n }));\n return store;\n });\n React.useEffect(() => {\n // Subscribe to previous root-state and copy changes over to the mirrored portal-state\n const unsub = previousRoot.subscribe(prev => usePortalStore.setState(state => inject(prev, state)));\n return () => {\n unsub();\n usePortalStore.destroy();\n };\n }, []);\n React.useEffect(() => {\n usePortalStore.setState(injectState => inject(previousRoot.getState(), injectState));\n }, [inject]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, reconciler.createPortal( /*#__PURE__*/React.createElement(context.Provider, {\n value: usePortalStore\n }, children), usePortalStore, null));\n}\nreconciler.injectIntoDevTools({\n bundleType: process.env.NODE_ENV === 'production' ? 0 : 1,\n rendererPackageName: '@react-three/fiber',\n version: React.version\n});\nconst act = React.unstable_act;\n\nexport { useFrame as A, Block as B, useGraph as C, useLoader as D, ErrorBoundary as E, useIsomorphicLayoutEffect as a, createRoot as b, createEvents as c, unmountComponentAtNode as d, extend as e, context as f, createPortal as g, reconciler as h, isRef as i, applyProps as j, dispose as k, invalidate as l, advance as m, addEffect as n, addAfterEffect as o, addTail as p, flushGlobalEffects as q, render as r, getRootState as s, threeTypes as t, useMutableCallback as u, act as v, roots as w, useInstanceHandle as x, useStore as y, useThree as z };\n","import { useState, useRef, useEffect, useMemo } from 'react';\nimport createDebounce from 'debounce';\n\nfunction useMeasure(_temp) {\n let {\n debounce,\n scroll,\n polyfill,\n offsetSize\n } = _temp === void 0 ? {\n debounce: 0,\n scroll: false,\n offsetSize: false\n } : _temp;\n const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);\n\n if (!ResizeObserver) {\n throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');\n }\n\n const [bounds, set] = useState({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0\n }); // keep all state in a ref\n\n const state = useRef({\n element: null,\n scrollContainers: null,\n resizeObserver: null,\n lastBounds: bounds\n }); // set actual debounce values early, so effects know if they should react accordingly\n\n const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;\n const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted\n\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return () => void (mounted.current = false);\n }); // memoize handlers, so event-listeners know when they should update\n\n const [forceRefresh, resizeChange, scrollChange] = useMemo(() => {\n const callback = () => {\n if (!state.current.element) return;\n const {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n } = state.current.element.getBoundingClientRect();\n const size = {\n left,\n top,\n width,\n height,\n bottom,\n right,\n x,\n y\n };\n\n if (state.current.element instanceof HTMLElement && offsetSize) {\n size.height = state.current.element.offsetHeight;\n size.width = state.current.element.offsetWidth;\n }\n\n Object.freeze(size);\n if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);\n };\n\n return [callback, resizeDebounce ? createDebounce(callback, resizeDebounce) : callback, scrollDebounce ? createDebounce(callback, scrollDebounce) : callback];\n }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers\n\n function removeListeners() {\n if (state.current.scrollContainers) {\n state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));\n state.current.scrollContainers = null;\n }\n\n if (state.current.resizeObserver) {\n state.current.resizeObserver.disconnect();\n state.current.resizeObserver = null;\n }\n } // add scroll-listeners / observers\n\n\n function addListeners() {\n if (!state.current.element) return;\n state.current.resizeObserver = new ResizeObserver(scrollChange);\n state.current.resizeObserver.observe(state.current.element);\n\n if (scroll && state.current.scrollContainers) {\n state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {\n capture: true,\n passive: true\n }));\n }\n } // the ref we expose to the user\n\n\n const ref = node => {\n if (!node || node === state.current.element) return;\n removeListeners();\n state.current.element = node;\n state.current.scrollContainers = findScrollContainers(node);\n addListeners();\n }; // add general event listeners\n\n\n useOnWindowScroll(scrollChange, Boolean(scroll));\n useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners\n\n useEffect(() => {\n removeListeners();\n addListeners();\n }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts\n\n useEffect(() => removeListeners, []);\n return [ref, bounds, forceRefresh];\n} // Adds native resize listener to window\n\n\nfunction useOnWindowResize(onWindowResize) {\n useEffect(() => {\n const cb = onWindowResize;\n window.addEventListener('resize', cb);\n return () => void window.removeEventListener('resize', cb);\n }, [onWindowResize]);\n}\n\nfunction useOnWindowScroll(onScroll, enabled) {\n useEffect(() => {\n if (enabled) {\n const cb = onScroll;\n window.addEventListener('scroll', cb, {\n capture: true,\n passive: true\n });\n return () => void window.removeEventListener('scroll', cb, true);\n }\n }, [onScroll, enabled]);\n} // Returns a list of scroll offsets\n\n\nfunction findScrollContainers(element) {\n const result = [];\n if (!element || element === document.body) return result;\n const {\n overflow,\n overflowX,\n overflowY\n } = window.getComputedStyle(element);\n if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);\n return [...result, ...findScrollContainers(element.parentElement)];\n} // Checks if element boundaries are equal\n\n\nconst keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];\n\nconst areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);\n\nexport { useMeasure as default };\n","import * as React from 'react'\nimport type ReactReconciler from 'react-reconciler'\n\n/**\n * Represents a react-internal Fiber node.\n */\nexport type Fiber = Omit & { stateNode: T }\n\n/**\n * Represents a {@link Fiber} node selector for traversal.\n */\nexport type FiberSelector = (\n /** The current {@link Fiber} node. */\n node: Fiber,\n) => boolean | void\n\n/**\n * Traverses up or down a {@link Fiber}, return `true` to stop and select a node.\n */\nexport function traverseFiber(\n /** Input {@link Fiber} to traverse. */\n fiber: Fiber | undefined,\n /** Whether to ascend and walk up the tree. Will walk down if `false`. */\n ascending: boolean,\n /** A {@link Fiber} node selector, returns the first match when `true` is passed. */\n selector: FiberSelector,\n): Fiber | undefined {\n if (!fiber) return\n if (selector(fiber) === true) return fiber\n\n let child = ascending ? fiber.return : fiber.child\n while (child) {\n const match = traverseFiber(child, ascending, selector)\n if (match) return match\n\n child = ascending ? null : child.sibling\n }\n}\n\n// In development, React will warn about using contexts between renderers.\n// Hide the warning because its-fine fixes this issue\n// https://github.com/facebook/react/pull/12779\nfunction wrapContext(context: React.Context): React.Context {\n try {\n return Object.defineProperties(context, {\n _currentRenderer: {\n get() {\n return null\n },\n set() {},\n },\n _currentRenderer2: {\n get() {\n return null\n },\n set() {},\n },\n })\n } catch (_) {\n return context\n }\n}\n\nconst FiberContext = wrapContext(React.createContext(null!))\n\n/**\n * A react-internal {@link Fiber} provider. This component binds React children to the React Fiber tree. Call its-fine hooks within this.\n */\nexport class FiberProvider extends React.Component<{ children?: React.ReactNode }> {\n private _reactInternals!: Fiber\n\n render() {\n return {this.props.children}\n }\n}\n\ninterface ReactInternal {\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: {\n ReactCurrentOwner: React.RefObject\n ReactCurrentDispatcher: React.RefObject<{ readContext(context: React.Context): T }>\n }\n}\n\nconst { ReactCurrentOwner, ReactCurrentDispatcher } = (React as unknown as ReactInternal)\n .__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED\n\n/**\n * Returns the current react-internal {@link Fiber}. This is an implementation detail of [react-reconciler](https://github.com/facebook/react/tree/main/packages/react-reconciler).\n */\nexport function useFiber(): Fiber | undefined {\n const root = React.useContext(FiberContext)\n if (root === null) throw new Error('its-fine: useFiber must be called within a !')\n\n // In development mode, React will expose the current component's Fiber as ReactCurrentOwner.\n // In production, we don't have this luxury and must traverse from FiberProvider via useId\n const id = React.useId()\n const fiber = React.useMemo(\n () =>\n ReactCurrentOwner?.current ??\n traverseFiber(root, false, (node) => {\n let state = node.memoizedState\n while (state) {\n if (state.memoizedState === id) return true\n state = state.next\n }\n }),\n [root, id],\n )\n\n return fiber\n}\n\n/**\n * Represents a react-reconciler container instance.\n */\nexport interface ContainerInstance {\n containerInfo: T\n}\n\n/**\n * Returns the current react-reconciler container info passed to {@link ReactReconciler.Reconciler.createContainer}.\n *\n * In react-dom, a container will point to the root DOM element; in react-three-fiber, it will point to the root Zustand store.\n */\nexport function useContainer(): T | undefined {\n const fiber = useFiber()\n const root = React.useMemo(\n () => traverseFiber>(fiber, true, (node) => node.stateNode?.containerInfo != null),\n [fiber],\n )\n\n return root?.stateNode.containerInfo\n}\n\n/**\n * Returns the nearest react-reconciler child instance or the node created from {@link ReactReconciler.HostConfig.createInstance}.\n *\n * In react-dom, this would be a DOM element; in react-three-fiber this would be an instance descriptor.\n */\nexport function useNearestChild(\n /** An optional element type to filter to. */\n type?: keyof JSX.IntrinsicElements,\n): React.MutableRefObject {\n const fiber = useFiber()\n const childRef = React.useRef()\n\n React.useLayoutEffect(() => {\n childRef.current = traverseFiber(\n fiber,\n false,\n (node) => typeof node.type === 'string' && (type === undefined || node.type === type),\n )?.stateNode\n }, [fiber])\n\n return childRef\n}\n\n/**\n * Returns the nearest react-reconciler parent instance or the node created from {@link ReactReconciler.HostConfig.createInstance}.\n *\n * In react-dom, this would be a DOM element; in react-three-fiber this would be an instance descriptor.\n */\nexport function useNearestParent(\n /** An optional element type to filter to. */\n type?: keyof JSX.IntrinsicElements,\n): React.MutableRefObject {\n const fiber = useFiber()\n const parentRef = React.useRef()\n\n React.useLayoutEffect(() => {\n parentRef.current = traverseFiber(\n fiber,\n true,\n (node) => typeof node.type === 'string' && (type === undefined || node.type === type),\n )?.stateNode\n }, [fiber])\n\n return parentRef\n}\n\nexport type ContextMap = Map, any> & {\n get(context: React.Context): T | undefined\n}\n\n/**\n * Returns a map of all contexts and their values.\n */\nexport function useContextMap(): ContextMap {\n const fiber = useFiber()\n const [contextMap] = React.useState(() => new Map, any>())\n\n // Collect live context\n contextMap.clear()\n let node = fiber\n while (node) {\n const context = node.type?._context\n if (context && context !== FiberContext && !contextMap.has(context)) {\n contextMap.set(context, ReactCurrentDispatcher?.current?.readContext(wrapContext(context)))\n }\n node = node.return!\n }\n\n return contextMap\n}\n\n/**\n * Represents a react-context bridge provider component.\n */\nexport type ContextBridge = React.FC>\n\n/**\n * React Context currently cannot be shared across [React renderers](https://reactjs.org/docs/codebase-overview.html#renderers) but explicitly forwarded between providers (see [react#17275](https://github.com/facebook/react/issues/17275)). This hook returns a {@link ContextBridge} of live context providers to pierce Context across renderers.\n *\n * Pass {@link ContextBridge} as a component to a secondary renderer to enable context-sharing within its children.\n */\nexport function useContextBridge(): ContextBridge {\n const contextMap = useContextMap()\n\n // Flatten context and their memoized values into a `ContextBridge` provider\n return React.useMemo(\n () =>\n Array.from(contextMap.keys()).reduce(\n (Prev, context) => (props) =>\n (\n \n \n \n ),\n (props) => ,\n ),\n [contextMap],\n )\n}\n","import { c as createEvents, e as extend, u as useMutableCallback, a as useIsomorphicLayoutEffect, b as createRoot, i as isRef, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from './index-bb759d07.esm.js';\nexport { t as ReactThreeFiber, w as _roots, v as act, o as addAfterEffect, n as addEffect, p as addTail, m as advance, j as applyProps, f as context, c as createEvents, g as createPortal, b as createRoot, k as dispose, e as extend, q as flushGlobalEffects, s as getRootState, l as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, A as useFrame, C as useGraph, x as useInstanceHandle, D as useLoader, y as useStore, z as useThree } from './index-bb759d07.esm.js';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport useMeasure from 'react-use-measure';\nimport { FiberProvider, useContextBridge } from 'its-fine';\nimport 'react-reconciler/constants';\nimport 'zustand';\nimport 'react-reconciler';\nimport 'scheduler';\nimport 'suspend-react';\n\nconst DOM_EVENTS = {\n onClick: ['click', false],\n onContextMenu: ['contextmenu', false],\n onDoubleClick: ['dblclick', false],\n onWheel: ['wheel', true],\n onPointerDown: ['pointerdown', true],\n onPointerUp: ['pointerup', true],\n onPointerLeave: ['pointerleave', true],\n onPointerMove: ['pointermove', true],\n onPointerCancel: ['pointercancel', true],\n onLostPointerCapture: ['lostpointercapture', true]\n};\n\n/** Default R3F event manager for web */\nfunction createPointerEvents(store) {\n const {\n handlePointer\n } = createEvents(store);\n return {\n priority: 1,\n enabled: true,\n compute(event, state, previous) {\n // https://github.com/pmndrs/react-three-fiber/pull/782\n // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n },\n connected: undefined,\n handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({\n ...acc,\n [key]: handlePointer(key)\n }), {}),\n update: () => {\n var _internal$lastEvent;\n const {\n events,\n internal\n } = store.getState();\n if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);\n },\n connect: target => {\n var _events$handlers;\n const {\n set,\n events\n } = store.getState();\n events.disconnect == null ? void 0 : events.disconnect();\n set(state => ({\n events: {\n ...state.events,\n connected: target\n }\n }));\n Object.entries((_events$handlers = events.handlers) != null ? _events$handlers : []).forEach(([name, event]) => {\n const [eventName, passive] = DOM_EVENTS[name];\n target.addEventListener(eventName, event, {\n passive\n });\n });\n },\n disconnect: () => {\n const {\n set,\n events\n } = store.getState();\n if (events.connected) {\n var _events$handlers2;\n Object.entries((_events$handlers2 = events.handlers) != null ? _events$handlers2 : []).forEach(([name, event]) => {\n if (events && events.connected instanceof HTMLElement) {\n const [eventName] = DOM_EVENTS[name];\n events.connected.removeEventListener(eventName, event);\n }\n });\n set(state => ({\n events: {\n ...state.events,\n connected: undefined\n }\n }));\n }\n }\n };\n}\n\nconst CanvasImpl = /*#__PURE__*/React.forwardRef(function Canvas({\n children,\n fallback,\n resize,\n style,\n gl,\n events = createPointerEvents,\n eventSource,\n eventPrefix,\n shadows,\n linear,\n flat,\n legacy,\n orthographic,\n frameloop,\n dpr,\n performance,\n raycaster,\n camera,\n onPointerMissed,\n onCreated,\n ...props\n}, forwardedRef) {\n // Create a known catalogue of Threejs-native elements\n // This will include the entire THREE namespace by default, users can extend\n // their own elements by using the createRoot API instead\n React.useMemo(() => extend(THREE), []);\n const Bridge = useContextBridge();\n const [containerRef, containerRect] = useMeasure({\n scroll: true,\n debounce: {\n scroll: 50,\n resize: 0\n },\n ...resize\n });\n const canvasRef = React.useRef(null);\n const divRef = React.useRef(null);\n React.useImperativeHandle(forwardedRef, () => canvasRef.current);\n const handlePointerMissed = useMutableCallback(onPointerMissed);\n const [block, setBlock] = React.useState(false);\n const [error, setError] = React.useState(false);\n\n // Suspend this component if block is a promise (2nd run)\n if (block) throw block;\n // Throw exception outwards if anything within canvas throws\n if (error) throw error;\n const root = React.useRef(null);\n useIsomorphicLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (containerRect.width > 0 && containerRect.height > 0 && canvas) {\n if (!root.current) root.current = createRoot(canvas);\n root.current.configure({\n gl,\n events,\n shadows,\n linear,\n flat,\n legacy,\n orthographic,\n frameloop,\n dpr,\n performance,\n raycaster,\n camera,\n size: containerRect,\n // Pass mutable reference to onPointerMissed so it's free to update\n onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),\n onCreated: state => {\n // Connect to event source\n state.events.connect == null ? void 0 : state.events.connect(eventSource ? isRef(eventSource) ? eventSource.current : eventSource : divRef.current);\n // Set up compute function\n if (eventPrefix) {\n state.setEvents({\n compute: (event, state) => {\n const x = event[eventPrefix + 'X'];\n const y = event[eventPrefix + 'Y'];\n state.pointer.set(x / state.size.width * 2 - 1, -(y / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n }\n // Call onCreated callback\n onCreated == null ? void 0 : onCreated(state);\n }\n });\n root.current.render( /*#__PURE__*/React.createElement(Bridge, null, /*#__PURE__*/React.createElement(ErrorBoundary, {\n set: setError\n }, /*#__PURE__*/React.createElement(React.Suspense, {\n fallback: /*#__PURE__*/React.createElement(Block, {\n set: setBlock\n })\n }, children))));\n }\n });\n React.useEffect(() => {\n const canvas = canvasRef.current;\n if (canvas) return () => unmountComponentAtNode(canvas);\n }, []);\n\n // When the event source is not this div, we need to set pointer-events to none\n // Or else the canvas will block events from reaching the event source\n const pointerEvents = eventSource ? 'none' : 'auto';\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: divRef,\n style: {\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n pointerEvents,\n ...style\n }\n }, props), /*#__PURE__*/React.createElement(\"div\", {\n ref: containerRef,\n style: {\n width: '100%',\n height: '100%'\n }\n }, /*#__PURE__*/React.createElement(\"canvas\", {\n ref: canvasRef,\n style: {\n display: 'block'\n }\n }, fallback)));\n});\n\n/**\n * A DOM canvas which accepts threejs elements as children.\n * @see https://docs.pmnd.rs/react-three-fiber/api/canvas\n */\nconst Canvas = /*#__PURE__*/React.forwardRef(function CanvasWrapper(props, ref) {\n return /*#__PURE__*/React.createElement(FiberProvider, null, /*#__PURE__*/React.createElement(CanvasImpl, _extends({}, props, {\n ref: ref\n })));\n});\n\nexport { Canvas, createPointerEvents as events };\n","import { TextureLoader } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\nimport { useLayoutEffect, useEffect } from 'react';\n\nconst IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';\nfunction useTexture(input, onLoad) {\n const gl = useThree(state => state.gl);\n const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input);\n useLayoutEffect(() => {\n onLoad == null ? void 0 : onLoad(textures);\n }, [onLoad]); // https://github.com/mrdoob/three.js/issues/22696\n // Upload the texture to the GPU immediately instead of waiting for the first render\n\n useEffect(() => {\n const array = Array.isArray(textures) ? textures : [textures];\n array.forEach(gl.initTexture);\n }, [gl, textures]);\n\n if (IsObject(input)) {\n const keys = Object.keys(input);\n const keyed = {};\n keys.forEach(key => Object.assign(keyed, {\n [key]: textures[keys.indexOf(key)]\n }));\n return keyed;\n } else {\n return textures;\n }\n}\n\nuseTexture.preload = url => useLoader.preload(TextureLoader, url);\n\nuseTexture.clear = input => useLoader.clear(TextureLoader, input);\n\nexport { IsObject, useTexture };\n","import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';\nimport { EventDispatcher, Vector3, MOUSE, TOUCH, PerspectiveCamera, Quaternion, Spherical, Vector2, OrthographicCamera } from 'three';\n\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity;\n\nclass OrbitControls extends EventDispatcher {\n // Set to false to disable this control\n // \"target\" sets the location of focus, where the object orbits around\n // How far you can dolly in and out ( PerspectiveCamera only )\n // How far you can zoom in and out ( OrthographicCamera only )\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n // radians\n // radians\n // How far you can orbit horizontally, upper and lower limits.\n // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n // radians\n // radians\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n // Set to false to disable rotating\n // Set to false to disable panning\n // if false, pan orthogonal to world-space direction camera.up\n // pixels moved per arrow key push\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n // 30 seconds per orbit when fps is 60\n // true if you want to reverse the orbit to mouse drag from left to right = orbits left\n // The four arrow keys\n // Mouse buttons\n // Touch fingers\n // the target DOM element for key events\n constructor(object, domElement) {\n super();\n\n _defineProperty(this, \"object\", void 0);\n\n _defineProperty(this, \"domElement\", void 0);\n\n _defineProperty(this, \"enabled\", true);\n\n _defineProperty(this, \"target\", new Vector3());\n\n _defineProperty(this, \"minDistance\", 0);\n\n _defineProperty(this, \"maxDistance\", Infinity);\n\n _defineProperty(this, \"minZoom\", 0);\n\n _defineProperty(this, \"maxZoom\", Infinity);\n\n _defineProperty(this, \"minPolarAngle\", 0);\n\n _defineProperty(this, \"maxPolarAngle\", Math.PI);\n\n _defineProperty(this, \"minAzimuthAngle\", -Infinity);\n\n _defineProperty(this, \"maxAzimuthAngle\", Infinity);\n\n _defineProperty(this, \"enableDamping\", false);\n\n _defineProperty(this, \"dampingFactor\", 0.05);\n\n _defineProperty(this, \"enableZoom\", true);\n\n _defineProperty(this, \"zoomSpeed\", 1.0);\n\n _defineProperty(this, \"enableRotate\", true);\n\n _defineProperty(this, \"rotateSpeed\", 1.0);\n\n _defineProperty(this, \"enablePan\", true);\n\n _defineProperty(this, \"panSpeed\", 1.0);\n\n _defineProperty(this, \"screenSpacePanning\", true);\n\n _defineProperty(this, \"keyPanSpeed\", 7.0);\n\n _defineProperty(this, \"autoRotate\", false);\n\n _defineProperty(this, \"autoRotateSpeed\", 2.0);\n\n _defineProperty(this, \"reverseOrbit\", false);\n\n _defineProperty(this, \"keys\", {\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n BOTTOM: 'ArrowDown'\n });\n\n _defineProperty(this, \"mouseButtons\", {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n });\n\n _defineProperty(this, \"touches\", {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n });\n\n _defineProperty(this, \"target0\", void 0);\n\n _defineProperty(this, \"position0\", void 0);\n\n _defineProperty(this, \"zoom0\", void 0);\n\n _defineProperty(this, \"_domElementKeyEvents\", null);\n\n _defineProperty(this, \"getPolarAngle\", void 0);\n\n _defineProperty(this, \"getAzimuthalAngle\", void 0);\n\n _defineProperty(this, \"setPolarAngle\", void 0);\n\n _defineProperty(this, \"setAzimuthalAngle\", void 0);\n\n _defineProperty(this, \"getDistance\", void 0);\n\n _defineProperty(this, \"listenToKeyEvents\", void 0);\n\n _defineProperty(this, \"saveState\", void 0);\n\n _defineProperty(this, \"reset\", void 0);\n\n _defineProperty(this, \"update\", void 0);\n\n _defineProperty(this, \"connect\", void 0);\n\n _defineProperty(this, \"dispose\", void 0);\n\n this.object = object;\n this.domElement = domElement; // for reset\n\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object instanceof PerspectiveCamera ? this.object.zoom : 1; //\n // public methods\n //\n\n this.getPolarAngle = () => spherical.phi;\n\n this.getAzimuthalAngle = () => spherical.theta;\n\n this.setPolarAngle = value => {\n // use modulo wrapping to safeguard value\n let phi = moduloWrapAround(value, 2 * Math.PI);\n let currentPhi = spherical.phi; // convert to the equivalent shortest angle\n\n if (currentPhi < 0) currentPhi += 2 * Math.PI;\n if (phi < 0) phi += 2 * Math.PI;\n let phiDist = Math.abs(phi - currentPhi);\n\n if (2 * Math.PI - phiDist < phiDist) {\n if (phi < currentPhi) {\n phi += 2 * Math.PI;\n } else {\n currentPhi += 2 * Math.PI;\n }\n }\n\n sphericalDelta.phi = phi - currentPhi;\n scope.update();\n };\n\n this.setAzimuthalAngle = value => {\n // use modulo wrapping to safeguard value\n let theta = moduloWrapAround(value, 2 * Math.PI);\n let currentTheta = spherical.theta; // convert to the equivalent shortest angle\n\n if (currentTheta < 0) currentTheta += 2 * Math.PI;\n if (theta < 0) theta += 2 * Math.PI;\n let thetaDist = Math.abs(theta - currentTheta);\n\n if (2 * Math.PI - thetaDist < thetaDist) {\n if (theta < currentTheta) {\n theta += 2 * Math.PI;\n } else {\n currentTheta += 2 * Math.PI;\n }\n }\n\n sphericalDelta.theta = theta - currentTheta;\n scope.update();\n };\n\n this.getDistance = () => scope.object.position.distanceTo(scope.target);\n\n this.listenToKeyEvents = domElement => {\n domElement.addEventListener('keydown', onKeyDown);\n this._domElementKeyEvents = domElement;\n };\n\n this.saveState = () => {\n scope.target0.copy(scope.target);\n scope.position0.copy(scope.object.position);\n scope.zoom0 = scope.object instanceof PerspectiveCamera ? scope.object.zoom : 1;\n };\n\n this.reset = () => {\n scope.target.copy(scope.target0);\n scope.object.position.copy(scope.position0);\n\n if (scope.object instanceof PerspectiveCamera) {\n scope.object.zoom = scope.zoom0;\n scope.object.updateProjectionMatrix();\n }\n\n scope.dispatchEvent(changeEvent);\n scope.update();\n state = STATE.NONE;\n }; // this method is exposed, but perhaps it would be better if we can make it private...\n\n\n this.update = (() => {\n const offset = new Vector3(); // so camera.up is the orbit axis\n\n const quat = new Quaternion().setFromUnitVectors(object.up, new Vector3(0, 1, 0));\n const quatInverse = quat.clone().invert();\n const lastPosition = new Vector3();\n const lastQuaternion = new Quaternion();\n const twoPI = 2 * Math.PI;\n return function update() {\n const position = scope.object.position;\n offset.copy(position).sub(scope.target); // rotate offset to \"y-axis-is-up\" space\n\n offset.applyQuaternion(quat); // angle from z-axis around y-axis\n\n spherical.setFromVector3(offset);\n\n if (scope.autoRotate && state === STATE.NONE) {\n rotateLeft(getAutoRotationAngle());\n }\n\n if (scope.enableDamping) {\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n } else {\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n } // restrict theta to be between desired limits\n\n\n let min = scope.minAzimuthAngle;\n let max = scope.maxAzimuthAngle;\n\n if (isFinite(min) && isFinite(max)) {\n if (min < -Math.PI) min += twoPI;else if (min > Math.PI) min -= twoPI;\n if (max < -Math.PI) max += twoPI;else if (max > Math.PI) max -= twoPI;\n\n if (min <= max) {\n spherical.theta = Math.max(min, Math.min(max, spherical.theta));\n } else {\n spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta);\n }\n } // restrict phi to be between desired limits\n\n\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n spherical.makeSafe();\n spherical.radius *= scale; // restrict radius to be between desired limits\n\n spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius)); // move target to panned location\n\n if (scope.enableDamping === true) {\n scope.target.addScaledVector(panOffset, scope.dampingFactor);\n } else {\n scope.target.add(panOffset);\n }\n\n offset.setFromSpherical(spherical); // rotate offset back to \"camera-up-vector-is-up\" space\n\n offset.applyQuaternion(quatInverse);\n position.copy(scope.target).add(offset);\n scope.object.lookAt(scope.target);\n\n if (scope.enableDamping === true) {\n sphericalDelta.theta *= 1 - scope.dampingFactor;\n sphericalDelta.phi *= 1 - scope.dampingFactor;\n panOffset.multiplyScalar(1 - scope.dampingFactor);\n } else {\n sphericalDelta.set(0, 0, 0);\n panOffset.set(0, 0, 0);\n }\n\n scale = 1; // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n scope.dispatchEvent(changeEvent);\n lastPosition.copy(scope.object.position);\n lastQuaternion.copy(scope.object.quaternion);\n zoomChanged = false;\n return true;\n }\n\n return false;\n };\n })(); // https://github.com/mrdoob/three.js/issues/20575\n\n\n this.connect = domElement => {\n if (domElement === document) {\n console.error('THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.');\n }\n\n scope.domElement = domElement; // disables touch scroll\n // touch-action needs to be defined for pointer events to work on mobile\n // https://stackoverflow.com/a/48254578\n\n scope.domElement.style.touchAction = 'none';\n scope.domElement.addEventListener('contextmenu', onContextMenu);\n scope.domElement.addEventListener('pointerdown', onPointerDown);\n scope.domElement.addEventListener('pointercancel', onPointerCancel);\n scope.domElement.addEventListener('wheel', onMouseWheel);\n };\n\n this.dispose = () => {\n var _scope$domElement, _scope$domElement2, _scope$domElement3, _scope$domElement4, _scope$domElement5, _scope$domElement6;\n\n (_scope$domElement = scope.domElement) === null || _scope$domElement === void 0 ? void 0 : _scope$domElement.removeEventListener('contextmenu', onContextMenu);\n (_scope$domElement2 = scope.domElement) === null || _scope$domElement2 === void 0 ? void 0 : _scope$domElement2.removeEventListener('pointerdown', onPointerDown);\n (_scope$domElement3 = scope.domElement) === null || _scope$domElement3 === void 0 ? void 0 : _scope$domElement3.removeEventListener('pointercancel', onPointerCancel);\n (_scope$domElement4 = scope.domElement) === null || _scope$domElement4 === void 0 ? void 0 : _scope$domElement4.removeEventListener('wheel', onMouseWheel);\n (_scope$domElement5 = scope.domElement) === null || _scope$domElement5 === void 0 ? void 0 : _scope$domElement5.ownerDocument.removeEventListener('pointermove', onPointerMove);\n (_scope$domElement6 = scope.domElement) === null || _scope$domElement6 === void 0 ? void 0 : _scope$domElement6.ownerDocument.removeEventListener('pointerup', onPointerUp);\n\n if (scope._domElementKeyEvents !== null) {\n scope._domElementKeyEvents.removeEventListener('keydown', onKeyDown);\n } //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n }; //\n // internals\n //\n\n\n const scope = this;\n const changeEvent = {\n type: 'change'\n };\n const startEvent = {\n type: 'start'\n };\n const endEvent = {\n type: 'end'\n };\n const STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_PAN: 4,\n TOUCH_DOLLY_PAN: 5,\n TOUCH_DOLLY_ROTATE: 6\n };\n let state = STATE.NONE;\n const EPS = 0.000001; // current position in spherical coordinates\n\n const spherical = new Spherical();\n const sphericalDelta = new Spherical();\n let scale = 1;\n const panOffset = new Vector3();\n let zoomChanged = false;\n const rotateStart = new Vector2();\n const rotateEnd = new Vector2();\n const rotateDelta = new Vector2();\n const panStart = new Vector2();\n const panEnd = new Vector2();\n const panDelta = new Vector2();\n const dollyStart = new Vector2();\n const dollyEnd = new Vector2();\n const dollyDelta = new Vector2();\n const pointers = [];\n const pointerPositions = {};\n\n function getAutoRotationAngle() {\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n }\n\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed);\n }\n\n function rotateLeft(angle) {\n if (scope.reverseOrbit) {\n sphericalDelta.theta += angle;\n } else {\n sphericalDelta.theta -= angle;\n }\n }\n\n function rotateUp(angle) {\n if (scope.reverseOrbit) {\n sphericalDelta.phi += angle;\n } else {\n sphericalDelta.phi -= angle;\n }\n }\n\n const panLeft = (() => {\n const v = new Vector3();\n return function panLeft(distance, objectMatrix) {\n v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n\n v.multiplyScalar(-distance);\n panOffset.add(v);\n };\n })();\n\n const panUp = (() => {\n const v = new Vector3();\n return function panUp(distance, objectMatrix) {\n if (scope.screenSpacePanning === true) {\n v.setFromMatrixColumn(objectMatrix, 1);\n } else {\n v.setFromMatrixColumn(objectMatrix, 0);\n v.crossVectors(scope.object.up, v);\n }\n\n v.multiplyScalar(distance);\n panOffset.add(v);\n };\n })(); // deltaX and deltaY are in pixels; right and down are positive\n\n\n const pan = (() => {\n const offset = new Vector3();\n return function pan(deltaX, deltaY) {\n const element = scope.domElement;\n\n if (element && scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n // perspective\n const position = scope.object.position;\n offset.copy(position).sub(scope.target);\n let targetDistance = offset.length(); // half of the fov is center to top of screen\n\n targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0); // we use only clientHeight here so aspect ratio does not distort speed\n\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n } else if (element && scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n // orthographic\n panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n } else {\n // camera neither orthographic nor perspective\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.');\n scope.enablePan = false;\n }\n };\n })();\n\n function dollyOut(dollyScale) {\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n scale /= dollyScale;\n } else if (scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n }\n }\n\n function dollyIn(dollyScale) {\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n scale *= dollyScale;\n } else if (scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n } else {\n console.warn('WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.');\n scope.enableZoom = false;\n }\n } //\n // event callbacks - update the object state\n //\n\n\n function handleMouseDownRotate(event) {\n rotateStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseDownDolly(event) {\n dollyStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseDownPan(event) {\n panStart.set(event.clientX, event.clientY);\n }\n\n function handleMouseMoveRotate(event) {\n rotateEnd.set(event.clientX, event.clientY);\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\n\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n\n rotateStart.copy(rotateEnd);\n scope.update();\n }\n\n function handleMouseMoveDolly(event) {\n dollyEnd.set(event.clientX, event.clientY);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n\n if (dollyDelta.y > 0) {\n dollyOut(getZoomScale());\n } else if (dollyDelta.y < 0) {\n dollyIn(getZoomScale());\n }\n\n dollyStart.copy(dollyEnd);\n scope.update();\n }\n\n function handleMouseMovePan(event) {\n panEnd.set(event.clientX, event.clientY);\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n scope.update();\n }\n\n function handleMouseWheel(event) {\n if (event.deltaY < 0) {\n dollyIn(getZoomScale());\n } else if (event.deltaY > 0) {\n dollyOut(getZoomScale());\n }\n\n scope.update();\n }\n\n function handleKeyDown(event) {\n let needsUpdate = false;\n\n switch (event.code) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed);\n needsUpdate = true;\n break;\n\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed);\n needsUpdate = true;\n break;\n\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n }\n\n if (needsUpdate) {\n // prevent the browser from scrolling on cursor keys\n event.preventDefault();\n scope.update();\n }\n }\n\n function handleTouchStartRotate() {\n if (pointers.length == 1) {\n rotateStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n rotateStart.set(x, y);\n }\n }\n\n function handleTouchStartPan() {\n if (pointers.length == 1) {\n panStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n panStart.set(x, y);\n }\n }\n\n function handleTouchStartDolly() {\n const dx = pointers[0].pageX - pointers[1].pageX;\n const dy = pointers[0].pageY - pointers[1].pageY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n }\n\n function handleTouchStartDollyPan() {\n if (scope.enableZoom) handleTouchStartDolly();\n if (scope.enablePan) handleTouchStartPan();\n }\n\n function handleTouchStartDollyRotate() {\n if (scope.enableZoom) handleTouchStartDolly();\n if (scope.enableRotate) handleTouchStartRotate();\n }\n\n function handleTouchMoveRotate(event) {\n if (pointers.length == 1) {\n rotateEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n rotateEnd.set(x, y);\n }\n\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); // yes, height\n\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n\n rotateStart.copy(rotateEnd);\n }\n\n function handleTouchMovePan(event) {\n if (pointers.length == 1) {\n panEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n panEnd.set(x, y);\n }\n\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n }\n\n function handleTouchMoveDolly(event) {\n const position = getSecondPointerPosition(event);\n const dx = event.pageX - position.x;\n const dy = event.pageY - position.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyEnd.set(0, distance);\n dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));\n dollyOut(dollyDelta.y);\n dollyStart.copy(dollyEnd);\n }\n\n function handleTouchMoveDollyPan(event) {\n if (scope.enableZoom) handleTouchMoveDolly(event);\n if (scope.enablePan) handleTouchMovePan(event);\n }\n\n function handleTouchMoveDollyRotate(event) {\n if (scope.enableZoom) handleTouchMoveDolly(event);\n if (scope.enableRotate) handleTouchMoveRotate(event);\n } //\n // event handlers - FSM: listen for events and reset state\n //\n\n\n function onPointerDown(event) {\n if (scope.enabled === false) return;\n\n if (pointers.length === 0) {\n var _scope$domElement7, _scope$domElement8;\n\n (_scope$domElement7 = scope.domElement) === null || _scope$domElement7 === void 0 ? void 0 : _scope$domElement7.ownerDocument.addEventListener('pointermove', onPointerMove);\n (_scope$domElement8 = scope.domElement) === null || _scope$domElement8 === void 0 ? void 0 : _scope$domElement8.ownerDocument.addEventListener('pointerup', onPointerUp);\n }\n\n addPointer(event);\n\n if (event.pointerType === 'touch') {\n onTouchStart(event);\n } else {\n onMouseDown(event);\n }\n }\n\n function onPointerMove(event) {\n if (scope.enabled === false) return;\n\n if (event.pointerType === 'touch') {\n onTouchMove(event);\n } else {\n onMouseMove(event);\n }\n }\n\n function onPointerUp(event) {\n removePointer(event);\n\n if (pointers.length === 0) {\n var _scope$domElement9, _scope$domElement10, _scope$domElement11;\n\n (_scope$domElement9 = scope.domElement) === null || _scope$domElement9 === void 0 ? void 0 : _scope$domElement9.releasePointerCapture(event.pointerId);\n (_scope$domElement10 = scope.domElement) === null || _scope$domElement10 === void 0 ? void 0 : _scope$domElement10.ownerDocument.removeEventListener('pointermove', onPointerMove);\n (_scope$domElement11 = scope.domElement) === null || _scope$domElement11 === void 0 ? void 0 : _scope$domElement11.ownerDocument.removeEventListener('pointerup', onPointerUp);\n }\n\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n\n function onPointerCancel(event) {\n removePointer(event);\n }\n\n function onMouseDown(event) {\n let mouseAction;\n\n switch (event.button) {\n case 0:\n mouseAction = scope.mouseButtons.LEFT;\n break;\n\n case 1:\n mouseAction = scope.mouseButtons.MIDDLE;\n break;\n\n case 2:\n mouseAction = scope.mouseButtons.RIGHT;\n break;\n\n default:\n mouseAction = -1;\n }\n\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (scope.enableZoom === false) return;\n handleMouseDownDolly(event);\n state = STATE.DOLLY;\n break;\n\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enablePan === false) return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n } else {\n if (scope.enableRotate === false) return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n }\n\n break;\n\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enableRotate === false) return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n } else {\n if (scope.enablePan === false) return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n }\n\n break;\n\n default:\n state = STATE.NONE;\n }\n\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n\n function onMouseMove(event) {\n if (scope.enabled === false) return;\n\n switch (state) {\n case STATE.ROTATE:\n if (scope.enableRotate === false) return;\n handleMouseMoveRotate(event);\n break;\n\n case STATE.DOLLY:\n if (scope.enableZoom === false) return;\n handleMouseMoveDolly(event);\n break;\n\n case STATE.PAN:\n if (scope.enablePan === false) return;\n handleMouseMovePan(event);\n break;\n }\n }\n\n function onMouseWheel(event) {\n if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) {\n return;\n }\n\n event.preventDefault();\n scope.dispatchEvent(startEvent);\n handleMouseWheel(event);\n scope.dispatchEvent(endEvent);\n }\n\n function onKeyDown(event) {\n if (scope.enabled === false || scope.enablePan === false) return;\n handleKeyDown(event);\n }\n\n function onTouchStart(event) {\n trackPointer(event);\n\n switch (pointers.length) {\n case 1:\n switch (scope.touches.ONE) {\n case TOUCH.ROTATE:\n if (scope.enableRotate === false) return;\n handleTouchStartRotate();\n state = STATE.TOUCH_ROTATE;\n break;\n\n case TOUCH.PAN:\n if (scope.enablePan === false) return;\n handleTouchStartPan();\n state = STATE.TOUCH_PAN;\n break;\n\n default:\n state = STATE.NONE;\n }\n\n break;\n\n case 2:\n switch (scope.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false) return;\n handleTouchStartDollyPan();\n state = STATE.TOUCH_DOLLY_PAN;\n break;\n\n case TOUCH.DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false) return;\n handleTouchStartDollyRotate();\n state = STATE.TOUCH_DOLLY_ROTATE;\n break;\n\n default:\n state = STATE.NONE;\n }\n\n break;\n\n default:\n state = STATE.NONE;\n }\n\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n\n function onTouchMove(event) {\n trackPointer(event);\n\n switch (state) {\n case STATE.TOUCH_ROTATE:\n if (scope.enableRotate === false) return;\n handleTouchMoveRotate(event);\n scope.update();\n break;\n\n case STATE.TOUCH_PAN:\n if (scope.enablePan === false) return;\n handleTouchMovePan(event);\n scope.update();\n break;\n\n case STATE.TOUCH_DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false) return;\n handleTouchMoveDollyPan(event);\n scope.update();\n break;\n\n case STATE.TOUCH_DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false) return;\n handleTouchMoveDollyRotate(event);\n scope.update();\n break;\n\n default:\n state = STATE.NONE;\n }\n }\n\n function onContextMenu(event) {\n if (scope.enabled === false) return;\n event.preventDefault();\n }\n\n function addPointer(event) {\n pointers.push(event);\n }\n\n function removePointer(event) {\n delete pointerPositions[event.pointerId];\n\n for (let i = 0; i < pointers.length; i++) {\n if (pointers[i].pointerId == event.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n }\n\n function trackPointer(event) {\n let position = pointerPositions[event.pointerId];\n\n if (position === undefined) {\n position = new Vector2();\n pointerPositions[event.pointerId] = position;\n }\n\n position.set(event.pageX, event.pageY);\n }\n\n function getSecondPointerPosition(event) {\n const pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];\n return pointerPositions[pointer.pointerId];\n } // connect events\n\n\n if (domElement !== undefined) this.connect(domElement); // force an update at start\n\n this.update();\n }\n\n} // This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\n//\n// Orbit - right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - left mouse, or arrow keys / touch: one-finger move\n\n\nclass MapControls extends OrbitControls {\n constructor(object, domElement) {\n super(object, domElement);\n this.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n this.mouseButtons.LEFT = MOUSE.PAN;\n this.mouseButtons.RIGHT = MOUSE.ROTATE;\n this.touches.ONE = TOUCH.PAN;\n this.touches.TWO = TOUCH.DOLLY_ROTATE;\n }\n\n}\n\nexport { MapControls, OrbitControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { OrbitControls as OrbitControls$1 } from 'three-stdlib';\n\nconst OrbitControls = /*#__PURE__*/React.forwardRef(({\n makeDefault,\n camera,\n regress,\n domElement,\n enableDamping = true,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const setEvents = useThree(state => state.setEvents);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n React.useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, regress, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n\n const onStartCb = e => {\n if (onStart) onStart(e);\n };\n\n const onEndCb = e => {\n if (onEnd) onEnd(e);\n };\n\n controls.addEventListener('change', callback);\n controls.addEventListener('start', onStartCb);\n controls.addEventListener('end', onEndCb);\n return () => {\n controls.removeEventListener('start', onStartCb);\n controls.removeEventListener('end', onEndCb);\n controls.removeEventListener('change', callback);\n };\n }, [onChange, onStart, onEnd, controls, invalidate, setEvents]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls,\n enableDamping: enableDamping\n }, restProps));\n});\n\nexport { OrbitControls };\n","import React, { useRef, Suspense } from 'react'\r\nimport { Canvas, useFrame, useLoader } from '@react-three/fiber'\r\nimport { TextureLoader } from 'three/src/loaders/TextureLoader.js'\r\nimport { useTexture } from \"@react-three/drei\"\r\nimport { OrbitControls } from '@react-three/drei'\r\nfunction Box({img1,img2,img3,img4,img5,img6}) {\r\n\r\n const textures = useTexture([\r\n (img3==undefined||img3 == null?'/side2.jpg':img3),\r\n (img5==undefined||img5 == null?'/side4.jpg':img5),\r\n (img1==undefined||img1 == null?'/top.jpg':img1),\r\n (img6==undefined||img6 == null?'/bottom.jpg':img6),\r\n (img2==undefined||img2 == null?'/side1.jpg':img2),\r\n (img4==undefined||img4 == null?'/side3.jpg':img4),\r\n ]);\r\n const mesh = useRef();\r\n\r\n\r\n return (\r\n \r\n {textures.map((texture, idx) =>\r\n \r\n )}\r\n );\r\n/*\r\n const texture_1 = useLoader(TextureLoader, '/pug.jpg')\r\n const texture_2 = useLoader(TextureLoader, '/pug.jpg')\r\n const texture_3 = useLoader(TextureLoader, '/printio.png')\r\n const texture_4 = useLoader(TextureLoader, '/printio.png')\r\n const texture_5 = useLoader(TextureLoader, '/pug.jpg')\r\n const texture_6 = useLoader(TextureLoader, '/pug.jpg')\r\n const mesh = useRef()\r\n useFrame(() => {\r\n mesh.current.rotation.x = mesh.current.rotation.y += 0.01\r\n })\r\n return (\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\nexport default function CubePreview(props) {\r\n\r\n return (\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 { inputToRGB, rgbToHex, rgbToHsv } from '@ctrl/tinycolor';\nvar hueStep = 2; // 色相阶梯\n\nvar saturationStep = 0.16; // 饱和度阶梯,浅色部分\n\nvar saturationStep2 = 0.05; // 饱和度阶梯,深色部分\n\nvar brightnessStep1 = 0.05; // 亮度阶梯,浅色部分\n\nvar brightnessStep2 = 0.15; // 亮度阶梯,深色部分\n\nvar lightColorCount = 5; // 浅色数量,主色上\n\nvar darkColorCount = 4; // 深色数量,主色下\n// 暗色主题颜色映射关系表\n\nvar darkColorMap = [{\n index: 7,\n opacity: 0.15\n}, {\n index: 6,\n opacity: 0.25\n}, {\n index: 5,\n opacity: 0.3\n}, {\n index: 5,\n opacity: 0.45\n}, {\n index: 5,\n opacity: 0.65\n}, {\n index: 5,\n opacity: 0.85\n}, {\n index: 4,\n opacity: 0.9\n}, {\n index: 3,\n opacity: 0.95\n}, {\n index: 2,\n opacity: 0.97\n}, {\n index: 1,\n opacity: 0.98\n}];\n\n// Wrapper function ported from TinyColor.prototype.toHsv\n// Keep it here because of `hsv.h * 360`\nfunction toHsv(_ref) {\n var r = _ref.r,\n g = _ref.g,\n b = _ref.b;\n var hsv = rgbToHsv(r, g, b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v\n };\n} // Wrapper function ported from TinyColor.prototype.toHexString\n// Keep it here because of the prefix `#`\n\n\nfunction toHex(_ref2) {\n var r = _ref2.r,\n g = _ref2.g,\n b = _ref2.b;\n return \"#\".concat(rgbToHex(r, g, b, false));\n} // Wrapper function ported from TinyColor.prototype.mix, not treeshakable.\n// Amount in range [0, 1]\n// Assume color1 & color2 has no alpha, since the following src code did so.\n\n\nfunction mix(rgb1, rgb2, amount) {\n var p = amount / 100;\n var rgb = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b\n };\n return rgb;\n}\n\nfunction getHue(hsv, i, light) {\n var hue; // 根据色相不同,色相转向不同\n\n if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {\n hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;\n } else {\n hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;\n }\n\n if (hue < 0) {\n hue += 360;\n } else if (hue >= 360) {\n hue -= 360;\n }\n\n return hue;\n}\n\nfunction getSaturation(hsv, i, light) {\n // grey color don't change saturation\n if (hsv.h === 0 && hsv.s === 0) {\n return hsv.s;\n }\n\n var saturation;\n\n if (light) {\n saturation = hsv.s - saturationStep * i;\n } else if (i === darkColorCount) {\n saturation = hsv.s + saturationStep;\n } else {\n saturation = hsv.s + saturationStep2 * i;\n } // 边界值修正\n\n\n if (saturation > 1) {\n saturation = 1;\n } // 第一格的 s 限制在 0.06-0.1 之间\n\n\n if (light && i === lightColorCount && saturation > 0.1) {\n saturation = 0.1;\n }\n\n if (saturation < 0.06) {\n saturation = 0.06;\n }\n\n return Number(saturation.toFixed(2));\n}\n\nfunction getValue(hsv, i, light) {\n var value;\n\n if (light) {\n value = hsv.v + brightnessStep1 * i;\n } else {\n value = hsv.v - brightnessStep2 * i;\n }\n\n if (value > 1) {\n value = 1;\n }\n\n return Number(value.toFixed(2));\n}\n\nexport default function generate(color) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var patterns = [];\n var pColor = inputToRGB(color);\n\n for (var i = lightColorCount; i > 0; i -= 1) {\n var hsv = toHsv(pColor);\n var colorString = toHex(inputToRGB({\n h: getHue(hsv, i, true),\n s: getSaturation(hsv, i, true),\n v: getValue(hsv, i, true)\n }));\n patterns.push(colorString);\n }\n\n patterns.push(toHex(pColor));\n\n for (var _i = 1; _i <= darkColorCount; _i += 1) {\n var _hsv = toHsv(pColor);\n\n var _colorString = toHex(inputToRGB({\n h: getHue(_hsv, _i),\n s: getSaturation(_hsv, _i),\n v: getValue(_hsv, _i)\n }));\n\n patterns.push(_colorString);\n } // dark theme patterns\n\n\n if (opts.theme === 'dark') {\n return darkColorMap.map(function (_ref3) {\n var index = _ref3.index,\n opacity = _ref3.opacity;\n var darkColorString = toHex(mix(inputToRGB(opts.backgroundColor || '#141414'), inputToRGB(patterns[index]), opacity * 100));\n return darkColorString;\n });\n }\n\n return patterns;\n}","import generate from \"./generate\";\nvar presetPrimaryColors = {\n red: '#F5222D',\n volcano: '#FA541C',\n orange: '#FA8C16',\n gold: '#FAAD14',\n yellow: '#FADB14',\n lime: '#A0D911',\n green: '#52C41A',\n cyan: '#13C2C2',\n blue: '#1677FF',\n geekblue: '#2F54EB',\n purple: '#722ED1',\n magenta: '#EB2F96',\n grey: '#666666'\n};\nvar presetPalettes = {};\nvar presetDarkPalettes = {};\nObject.keys(presetPrimaryColors).forEach(function (key) {\n presetPalettes[key] = generate(presetPrimaryColors[key]);\n presetPalettes[key].primary = presetPalettes[key][5]; // dark presetPalettes\n\n presetDarkPalettes[key] = generate(presetPrimaryColors[key], {\n theme: 'dark',\n backgroundColor: '#141414'\n });\n presetDarkPalettes[key].primary = presetDarkPalettes[key][5];\n});\nvar red = presetPalettes.red;\nvar volcano = presetPalettes.volcano;\nvar gold = presetPalettes.gold;\nvar orange = presetPalettes.orange;\nvar yellow = presetPalettes.yellow;\nvar lime = presetPalettes.lime;\nvar green = presetPalettes.green;\nvar cyan = presetPalettes.cyan;\nvar blue = presetPalettes.blue;\nvar geekblue = presetPalettes.geekblue;\nvar purple = presetPalettes.purple;\nvar magenta = presetPalettes.magenta;\nvar grey = presetPalettes.grey;\nvar gray = presetPalettes.grey;\nexport { generate, presetPalettes, presetDarkPalettes, presetPrimaryColors, red, volcano, orange, gold, yellow, lime, green, cyan, blue, geekblue, purple, magenta, grey, gray };","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\n// [times, realValue]\nvar Entity = /*#__PURE__*/function () {\n function Entity() {\n _classCallCheck(this, Entity);\n\n _defineProperty(this, \"cache\", new Map());\n }\n\n _createClass(Entity, [{\n key: \"get\",\n value: function get(keys) {\n return this.cache.get(keys.join('%')) || null;\n }\n }, {\n key: \"update\",\n value: function update(keys, valueFn) {\n var path = keys.join('%');\n var prevValue = this.cache.get(path);\n var nextValue = valueFn(prevValue);\n\n if (nextValue === null) {\n this.cache.delete(path);\n } else {\n this.cache.set(path, nextValue);\n }\n }\n }]);\n\n return Entity;\n}();\n\nexport default Entity;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport * as React from 'react';\nimport CacheEntity from \"./Cache\";\nexport var ATTR_TOKEN = 'data-token-hash';\nexport var ATTR_MARK = 'data-css-hash';\nexport var ATTR_DEV_CACHE_PATH = 'data-dev-cache-path'; // Mark css-in-js instance in style element\n\nexport var CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\nexport var CSS_IN_JS_INSTANCE_ID = Math.random().toString(12).slice(2);\nexport function createCache() {\n if (typeof document !== 'undefined' && document.head && document.body) {\n var styles = document.body.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\")) || [];\n var firstChild = document.head.firstChild;\n Array.from(styles).forEach(function (style) {\n style[CSS_IN_JS_INSTANCE] = style[CSS_IN_JS_INSTANCE] || CSS_IN_JS_INSTANCE_ID; // Not force move if no head\n\n document.head.insertBefore(style, firstChild);\n }); // Deduplicate of moved styles\n\n var styleHash = {};\n Array.from(document.querySelectorAll(\"style[\".concat(ATTR_MARK, \"]\"))).forEach(function (style) {\n var hash = style.getAttribute(ATTR_MARK);\n\n if (styleHash[hash]) {\n if (style[CSS_IN_JS_INSTANCE] === CSS_IN_JS_INSTANCE_ID) {\n var _style$parentNode;\n\n (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 ? void 0 : _style$parentNode.removeChild(style);\n }\n } else {\n styleHash[hash] = true;\n }\n });\n }\n\n return new CacheEntity();\n}\nvar StyleContext = /*#__PURE__*/React.createContext({\n hashPriority: 'low',\n cache: createCache(),\n defaultCache: true\n});\nexport var StyleProvider = function StyleProvider(props) {\n var children = props.children,\n restProps = _objectWithoutProperties(props, _excluded);\n\n var parentContext = React.useContext(StyleContext);\n var context = useMemo(function () {\n var mergedContext = _objectSpread({}, parentContext);\n\n Object.keys(restProps).forEach(function (key) {\n var value = restProps[key];\n\n if (restProps[key] !== undefined) {\n mergedContext[key] = value;\n }\n });\n var cache = restProps.cache;\n mergedContext.cache = mergedContext.cache || createCache();\n mergedContext.defaultCache = !cache && parentContext.defaultCache;\n return mergedContext;\n }, [parentContext, restProps], function (prev, next) {\n return !isEqual(prev[0], next[0], true) || !isEqual(prev[1], next[1], true);\n });\n return /*#__PURE__*/React.createElement(StyleContext.Provider, {\n value: context\n }, children);\n};\nexport default StyleContext;","function useProdHMR() {\n return false;\n}\n\nvar webpackHMR = false;\n\nfunction useDevHMR() {\n return webpackHMR;\n}\n\nexport default process.env.NODE_ENV === 'production' ? useProdHMR : useDevHMR; // Webpack `module.hot.accept` do not support any deps update trigger\n// We have to hack handler to force mark as HRM\n\nif (process.env.NODE_ENV !== 'production' && typeof module !== 'undefined' && module && module.hot) {\n var win = window;\n\n if (typeof win.webpackHotUpdate === 'function') {\n var originWebpackHotUpdate = win.webpackHotUpdate;\n\n win.webpackHotUpdate = function () {\n webpackHMR = true;\n setTimeout(function () {\n webpackHMR = false;\n }, 0);\n return originWebpackHotUpdate.apply(void 0, arguments);\n };\n }\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport StyleContext from \"../StyleContext\";\nimport useHMR from \"./useHMR\";\nexport default function useClientCache(prefix, keyPath, cacheFn, onCacheRemove) {\n var _React$useContext = React.useContext(StyleContext),\n globalCache = _React$useContext.cache;\n\n var fullPath = [prefix].concat(_toConsumableArray(keyPath));\n var HMRUpdate = useHMR(); // Create cache\n\n React.useMemo(function () {\n globalCache.update(fullPath, function (prevCache) {\n var _ref = prevCache || [],\n _ref2 = _slicedToArray(_ref, 2),\n _ref2$ = _ref2[0],\n times = _ref2$ === void 0 ? 0 : _ref2$,\n cache = _ref2[1]; // HMR should always ignore cache since developer may change it\n\n\n var tmpCache = cache;\n\n if (process.env.NODE_ENV !== 'production' && cache && HMRUpdate) {\n onCacheRemove === null || onCacheRemove === void 0 ? void 0 : onCacheRemove(tmpCache, HMRUpdate);\n tmpCache = null;\n }\n\n var mergedCache = tmpCache || cacheFn();\n return [times + 1, mergedCache];\n });\n },\n /* eslint-disable react-hooks/exhaustive-deps */\n [fullPath.join('_')]\n /* eslint-enable */\n ); // Remove if no need anymore\n\n React.useEffect(function () {\n return function () {\n globalCache.update(fullPath, function (prevCache) {\n var _ref3 = prevCache || [],\n _ref4 = _slicedToArray(_ref3, 2),\n _ref4$ = _ref4[0],\n times = _ref4$ === void 0 ? 0 : _ref4$,\n cache = _ref4[1];\n\n var nextCount = times - 1;\n\n if (nextCount === 0) {\n onCacheRemove === null || onCacheRemove === void 0 ? void 0 : onCacheRemove(cache, false);\n return null;\n }\n\n return [times - 1, cache];\n });\n };\n }, fullPath);\n return globalCache.get(fullPath)[1];\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nexport function flattenToken(token) {\n var str = '';\n Object.keys(token).forEach(function (key) {\n var value = token[key];\n str += key;\n\n if (value && _typeof(value) === 'object') {\n str += flattenToken(value);\n } else {\n str += value;\n }\n });\n return str;\n}\n/**\n * Convert derivative token to key string\n */\n\nexport function token2key(token, salt) {\n return hash(\"\".concat(salt, \"_\").concat(flattenToken(token)));\n}\nvar layerKey = \"layer-\".concat(Date.now(), \"-\").concat(Math.random()).replace(/\\./g, '');\nvar layerWidth = '903px';\n\nfunction supportSelector(styleStr, handleElement) {\n if (canUseDom()) {\n var _ele$parentNode;\n\n updateCSS(styleStr, layerKey);\n\n var _ele = document.createElement('div');\n\n _ele.style.position = 'fixed';\n _ele.style.left = '0';\n _ele.style.top = '0';\n handleElement === null || handleElement === void 0 ? void 0 : handleElement(_ele);\n document.body.appendChild(_ele);\n\n if (process.env.NODE_ENV !== 'production') {\n _ele.innerHTML = 'Test';\n _ele.style.zIndex = '9999999';\n }\n\n var support = getComputedStyle(_ele).width === layerWidth;\n (_ele$parentNode = _ele.parentNode) === null || _ele$parentNode === void 0 ? void 0 : _ele$parentNode.removeChild(_ele);\n removeCSS(layerKey);\n return support;\n }\n\n return false;\n}\n\nvar canLayer = undefined;\nexport function supportLayer() {\n if (canLayer === undefined) {\n canLayer = supportSelector(\"@layer \".concat(layerKey, \" { .\").concat(layerKey, \" { width: \").concat(layerWidth, \"!important; } }\"), function (ele) {\n ele.className = layerKey;\n });\n }\n\n return canLayer;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport hash from '@emotion/hash';\nimport { ATTR_TOKEN, CSS_IN_JS_INSTANCE, CSS_IN_JS_INSTANCE_ID } from \"../StyleContext\";\nimport useGlobalCache from \"./useGlobalCache\";\nimport { flattenToken, token2key } from \"../util\";\nvar EMPTY_OVERRIDE = {}; // Generate different prefix to make user selector break in production env.\n// This helps developer not to do style override directly on the hash id.\n\nvar hashPrefix = process.env.NODE_ENV !== 'production' ? 'css-dev-only-do-not-override' : 'css';\nvar tokenKeys = new Map();\n\nfunction recordCleanToken(tokenKey) {\n tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) + 1);\n}\n\nfunction removeStyleTags(key) {\n if (typeof document !== 'undefined') {\n var styles = document.querySelectorAll(\"style[\".concat(ATTR_TOKEN, \"=\\\"\").concat(key, \"\\\"]\"));\n styles.forEach(function (style) {\n if (style[CSS_IN_JS_INSTANCE] === CSS_IN_JS_INSTANCE_ID) {\n var _style$parentNode;\n\n (_style$parentNode = style.parentNode) === null || _style$parentNode === void 0 ? void 0 : _style$parentNode.removeChild(style);\n }\n });\n }\n} // Remove will check current keys first\n\n\nfunction cleanTokenStyle(tokenKey) {\n tokenKeys.set(tokenKey, (tokenKeys.get(tokenKey) || 0) - 1);\n var tokenKeyList = Array.from(tokenKeys.keys());\n var cleanableKeyList = tokenKeyList.filter(function (key) {\n var count = tokenKeys.get(key) || 0;\n return count <= 0;\n });\n\n if (cleanableKeyList.length < tokenKeyList.length) {\n cleanableKeyList.forEach(function (key) {\n removeStyleTags(key);\n tokenKeys.delete(key);\n });\n }\n}\n/**\n * Cache theme derivative token as global shared one\n * @param theme Theme entity\n * @param tokens List of tokens, used for cache. Please do not dynamic generate object directly\n * @param option Additional config\n * @returns Call Theme.getDerivativeToken(tokenObject) to get token\n */\n\n\nexport default function useCacheToken(theme, tokens) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _option$salt = option.salt,\n salt = _option$salt === void 0 ? '' : _option$salt,\n _option$override = option.override,\n override = _option$override === void 0 ? EMPTY_OVERRIDE : _option$override,\n formatToken = option.formatToken; // Basic - We do basic cache here\n\n var mergedToken = React.useMemo(function () {\n return Object.assign.apply(Object, [{}].concat(_toConsumableArray(tokens)));\n }, [tokens]);\n var tokenStr = React.useMemo(function () {\n return flattenToken(mergedToken);\n }, [mergedToken]);\n var overrideTokenStr = React.useMemo(function () {\n return flattenToken(override);\n }, [override]);\n var cachedToken = useGlobalCache('token', [salt, theme.id, tokenStr, overrideTokenStr], function () {\n var derivativeToken = theme.getDerivativeToken(mergedToken); // Merge with override\n\n var mergedDerivativeToken = _objectSpread(_objectSpread({}, derivativeToken), override); // Format if needed\n\n\n if (formatToken) {\n mergedDerivativeToken = formatToken(mergedDerivativeToken);\n } // Optimize for `useStyleRegister` performance\n\n\n var tokenKey = token2key(mergedDerivativeToken, salt);\n mergedDerivativeToken._tokenKey = tokenKey;\n recordCleanToken(tokenKey);\n var hashId = \"\".concat(hashPrefix, \"-\").concat(hash(tokenKey));\n mergedDerivativeToken._hashId = hashId; // Not used\n\n return [mergedDerivativeToken, hashId];\n }, function (cache) {\n // Remove token will remove all related style\n cleanTokenStyle(cache[0]._tokenKey);\n });\n return cachedToken;\n}","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport hash from '@emotion/hash';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport * as React from 'react'; // @ts-ignore\n\nimport unitless from '@emotion/unitless';\nimport { compile, serialize, stringify } from 'stylis';\nimport { contentQuotesLinter, hashedAnimationLinter } from \"../linters\";\nimport StyleContext, { ATTR_DEV_CACHE_PATH, ATTR_MARK, ATTR_TOKEN, CSS_IN_JS_INSTANCE, CSS_IN_JS_INSTANCE_ID } from \"../StyleContext\";\nimport { supportLayer } from \"../util\";\nimport useGlobalCache from \"./useGlobalCache\";\nvar isClientSide = canUseDom();\nvar SKIP_CHECK = '_skip_check_';\n// ============================================================================\n// == Parser ==\n// ============================================================================\n// Preprocessor style content to browser support one\nexport function normalizeStyle(styleStr) {\n var serialized = serialize(compile(styleStr), stringify);\n return serialized.replace(/\\{%%%\\:[^;];}/g, ';');\n}\n\nfunction isCompoundCSSProperty(value) {\n return _typeof(value) === 'object' && value && SKIP_CHECK in value;\n} // 注入 hash 值\n\n\nfunction injectSelectorHash(key, hashId, hashPriority) {\n if (!hashId) {\n return key;\n }\n\n var hashClassName = \".\".concat(hashId);\n var hashSelector = hashPriority === 'low' ? \":where(\".concat(hashClassName, \")\") : hashClassName; // 注入 hashId\n\n var keys = key.split(',').map(function (k) {\n var _firstPath$match;\n\n var fullPath = k.trim().split(/\\s+/); // 如果 Selector 第一个是 HTML Element,那我们就插到它的后面。反之,就插到最前面。\n\n var firstPath = fullPath[0] || '';\n var htmlElement = ((_firstPath$match = firstPath.match(/^\\w+/)) === null || _firstPath$match === void 0 ? void 0 : _firstPath$match[0]) || '';\n firstPath = \"\".concat(htmlElement).concat(hashSelector).concat(firstPath.slice(htmlElement.length));\n return [firstPath].concat(_toConsumableArray(fullPath.slice(1))).join(' ');\n });\n return keys.join(',');\n}\n\n// Global effect style will mount once and not removed\n// The effect will not save in SSR cache (e.g. keyframes)\nvar globalEffectStyleKeys = new Set();\n/**\n * @private Test only. Clear the global effect style keys.\n */\n\nexport var _cf = process.env.NODE_ENV !== 'production' ? function () {\n return globalEffectStyleKeys.clear();\n} : undefined; // Parse CSSObject to style content\n\nexport var parseStyle = function parseStyle(interpolation) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {\n root: true,\n parentSelectors: []\n },\n root = _ref.root,\n injectHash = _ref.injectHash,\n parentSelectors = _ref.parentSelectors;\n\n var hashId = config.hashId,\n layer = config.layer,\n path = config.path,\n hashPriority = config.hashPriority,\n _config$transformers = config.transformers,\n transformers = _config$transformers === void 0 ? [] : _config$transformers,\n _config$linters = config.linters,\n linters = _config$linters === void 0 ? [] : _config$linters;\n var styleStr = '';\n var effectStyle = {};\n\n function parseKeyframes(keyframes) {\n var animationName = keyframes.getName(hashId);\n\n if (!effectStyle[animationName]) {\n var _parseStyle = parseStyle(keyframes.style, config, {\n root: false,\n parentSelectors: parentSelectors\n }),\n _parseStyle2 = _slicedToArray(_parseStyle, 1),\n _parsedStr = _parseStyle2[0];\n\n effectStyle[animationName] = \"@keyframes \".concat(keyframes.getName(hashId)).concat(_parsedStr);\n }\n }\n\n function flattenList(list) {\n var fullList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n list.forEach(function (item) {\n if (Array.isArray(item)) {\n flattenList(item, fullList);\n } else if (item) {\n fullList.push(item);\n }\n });\n return fullList;\n }\n\n var flattenStyleList = flattenList(Array.isArray(interpolation) ? interpolation : [interpolation]);\n flattenStyleList.forEach(function (originStyle) {\n // Only root level can use raw string\n var style = typeof originStyle === 'string' && !root ? {} : originStyle;\n\n if (typeof style === 'string') {\n styleStr += \"\".concat(style, \"\\n\");\n } else if (style._keyframe) {\n // Keyframe\n parseKeyframes(style);\n } else {\n var mergedStyle = transformers.reduce(function (prev, trans) {\n var _trans$visit;\n\n return (trans === null || trans === void 0 ? void 0 : (_trans$visit = trans.visit) === null || _trans$visit === void 0 ? void 0 : _trans$visit.call(trans, prev)) || prev;\n }, style); // Normal CSSObject\n\n Object.keys(mergedStyle).forEach(function (key) {\n var value = mergedStyle[key];\n\n if (_typeof(value) === 'object' && value && (key !== 'animationName' || !value._keyframe) && !isCompoundCSSProperty(value)) {\n var subInjectHash = false; // 当成嵌套对象来处理\n\n var mergedKey = key.trim(); // Whether treat child as root. In most case it is false.\n\n var nextRoot = false; // 拆分多个选择器\n\n if ((root || injectHash) && hashId) {\n if (mergedKey.startsWith('@')) {\n // 略过媒体查询,交给子节点继续插入 hashId\n subInjectHash = true;\n } else {\n // 注入 hashId\n mergedKey = injectSelectorHash(key, hashId, hashPriority);\n }\n } else if (root && !hashId && (mergedKey === '&' || mergedKey === '')) {\n // In case of `{ '&': { a: { color: 'red' } } }` or `{ '': { a: { color: 'red' } } }` without hashId,\n // we will get `&{a:{color:red;}}` or `{a:{color:red;}}` string for stylis to compile.\n // But it does not conform to stylis syntax,\n // and finally we will get `{color:red;}` as css, which is wrong.\n // So we need to remove key in root, and treat child `{ a: { color: 'red' } }` as root.\n mergedKey = '';\n nextRoot = true;\n }\n\n var _parseStyle3 = parseStyle(value, config, {\n root: nextRoot,\n injectHash: subInjectHash,\n parentSelectors: [].concat(_toConsumableArray(parentSelectors), [mergedKey])\n }),\n _parseStyle4 = _slicedToArray(_parseStyle3, 2),\n _parsedStr2 = _parseStyle4[0],\n childEffectStyle = _parseStyle4[1];\n\n effectStyle = _objectSpread(_objectSpread({}, effectStyle), childEffectStyle);\n styleStr += \"\".concat(mergedKey).concat(_parsedStr2);\n } else {\n var _value;\n\n var actualValue = (_value = value === null || value === void 0 ? void 0 : value.value) !== null && _value !== void 0 ? _value : value;\n\n if (process.env.NODE_ENV !== 'production' && (_typeof(value) !== 'object' || !(value !== null && value !== void 0 && value[SKIP_CHECK]))) {\n [contentQuotesLinter, hashedAnimationLinter].concat(_toConsumableArray(linters)).forEach(function (linter) {\n return linter(key, actualValue, {\n path: path,\n hashId: hashId,\n parentSelectors: parentSelectors\n });\n });\n } // 如果是样式则直接插入\n\n\n var styleName = key.replace(/[A-Z]/g, function (match) {\n return \"-\".concat(match.toLowerCase());\n }); // Auto suffix with px\n\n var formatValue = actualValue;\n\n if (!unitless[key] && typeof formatValue === 'number' && formatValue !== 0) {\n formatValue = \"\".concat(formatValue, \"px\");\n } // handle animationName & Keyframe value\n\n\n if (key === 'animationName' && value !== null && value !== void 0 && value._keyframe) {\n parseKeyframes(value);\n formatValue = value.getName(hashId);\n }\n\n styleStr += \"\".concat(styleName, \":\").concat(formatValue, \";\");\n }\n });\n }\n });\n\n if (!root) {\n styleStr = \"{\".concat(styleStr, \"}\");\n } else if (layer && supportLayer()) {\n var layerCells = layer.split(',');\n var layerName = layerCells[layerCells.length - 1].trim();\n styleStr = \"@layer \".concat(layerName, \" {\").concat(styleStr, \"}\"); // Order of layer if needed\n\n if (layerCells.length > 1) {\n // zombieJ: stylis do not support layer order, so we need to handle it manually.\n styleStr = \"@layer \".concat(layer, \"{%%%:%}\").concat(styleStr);\n }\n }\n\n return [styleStr, effectStyle];\n}; // ============================================================================\n// == Register ==\n// ============================================================================\n\nfunction uniqueHash(path, styleStr) {\n return hash(\"\".concat(path.join('%')).concat(styleStr));\n}\n\nfunction Empty() {\n return null;\n}\n/**\n * Register a style to the global style sheet.\n */\n\n\nexport default function useStyleRegister(info, styleFn) {\n var token = info.token,\n path = info.path,\n hashId = info.hashId,\n layer = info.layer;\n\n var _React$useContext = React.useContext(StyleContext),\n autoClear = _React$useContext.autoClear,\n mock = _React$useContext.mock,\n defaultCache = _React$useContext.defaultCache,\n hashPriority = _React$useContext.hashPriority,\n container = _React$useContext.container,\n ssrInline = _React$useContext.ssrInline,\n transformers = _React$useContext.transformers,\n linters = _React$useContext.linters;\n\n var tokenKey = token._tokenKey;\n var fullPath = [tokenKey].concat(_toConsumableArray(path)); // Check if need insert style\n\n var isMergedClientSide = isClientSide;\n\n if (process.env.NODE_ENV !== 'production' && mock !== undefined) {\n isMergedClientSide = mock === 'client';\n }\n\n var _useGlobalCache = useGlobalCache('style', fullPath, // Create cache if needed\n function () {\n var styleObj = styleFn();\n\n var _parseStyle5 = parseStyle(styleObj, {\n hashId: hashId,\n hashPriority: hashPriority,\n layer: layer,\n path: path.join('-'),\n transformers: transformers,\n linters: linters\n }),\n _parseStyle6 = _slicedToArray(_parseStyle5, 2),\n parsedStyle = _parseStyle6[0],\n effectStyle = _parseStyle6[1];\n\n var styleStr = normalizeStyle(parsedStyle);\n var styleId = uniqueHash(fullPath, styleStr);\n\n if (isMergedClientSide) {\n var style = updateCSS(styleStr, styleId, {\n mark: ATTR_MARK,\n prepend: 'queue',\n attachTo: container\n });\n style[CSS_IN_JS_INSTANCE] = CSS_IN_JS_INSTANCE_ID; // Used for `useCacheToken` to remove on batch when token removed\n\n style.setAttribute(ATTR_TOKEN, tokenKey); // Dev usage to find which cache path made this easily\n\n if (process.env.NODE_ENV !== 'production') {\n style.setAttribute(ATTR_DEV_CACHE_PATH, fullPath.join('|'));\n } // Inject client side effect style\n\n\n Object.keys(effectStyle).forEach(function (effectKey) {\n if (!globalEffectStyleKeys.has(effectKey)) {\n globalEffectStyleKeys.add(effectKey); // Inject\n\n updateCSS(normalizeStyle(effectStyle[effectKey]), \"_effect-\".concat(effectKey), {\n mark: ATTR_MARK,\n prepend: 'queue',\n attachTo: container\n });\n }\n });\n }\n\n return [styleStr, tokenKey, styleId];\n }, // Remove cache if no need\n function (_ref2, fromHMR) {\n var _ref3 = _slicedToArray(_ref2, 3),\n styleId = _ref3[2];\n\n if ((fromHMR || autoClear) && isClientSide) {\n removeCSS(styleId, {\n mark: ATTR_MARK\n });\n }\n }),\n _useGlobalCache2 = _slicedToArray(_useGlobalCache, 3),\n cachedStyleStr = _useGlobalCache2[0],\n cachedTokenKey = _useGlobalCache2[1],\n cachedStyleId = _useGlobalCache2[2];\n\n return function (node) {\n var styleNode;\n\n if (!ssrInline || isMergedClientSide || !defaultCache) {\n styleNode = /*#__PURE__*/React.createElement(Empty, null);\n } else {\n var _ref4;\n\n styleNode = /*#__PURE__*/React.createElement(\"style\", _extends({}, (_ref4 = {}, _defineProperty(_ref4, ATTR_TOKEN, cachedTokenKey), _defineProperty(_ref4, ATTR_MARK, cachedStyleId), _ref4), {\n dangerouslySetInnerHTML: {\n __html: cachedStyleStr\n }\n }));\n }\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, styleNode, node);\n };\n} // ============================================================================\n// == SSR ==\n// ============================================================================\n\nexport function extractStyle(cache) {\n // prefix with `style` is used for `useStyleRegister` to cache style context\n var styleKeys = Array.from(cache.cache.keys()).filter(function (key) {\n return key.startsWith('style%');\n }); // const tokenStyles: Record = {};\n\n var styleText = '';\n styleKeys.forEach(function (key) {\n var _ = _slicedToArray(cache.cache.get(key)[1], 3),\n styleStr = _[0],\n tokenKey = _[1],\n styleId = _[2];\n\n styleText += \"\");\n });\n return styleText;\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nvar Keyframe = /*#__PURE__*/function () {\n function Keyframe(name, style) {\n _classCallCheck(this, Keyframe);\n\n _defineProperty(this, \"name\", void 0);\n\n _defineProperty(this, \"style\", void 0);\n\n _defineProperty(this, \"_keyframe\", true);\n\n this.name = name;\n this.style = style;\n }\n\n _createClass(Keyframe, [{\n key: \"getName\",\n value: function getName() {\n var hashId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return hashId ? \"\".concat(hashId, \"-\").concat(this.name) : this.name;\n }\n }]);\n\n return Keyframe;\n}();\n\nexport default Keyframe;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// ================================== Cache ==================================\nexport function sameDerivativeOption(left, right) {\n if (left.length !== right.length) {\n return false;\n }\n\n for (var i = 0; i < left.length; i++) {\n if (left[i] !== right[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nvar ThemeCache = /*#__PURE__*/function () {\n function ThemeCache() {\n _classCallCheck(this, ThemeCache);\n\n _defineProperty(this, \"cache\", void 0);\n\n _defineProperty(this, \"keys\", void 0);\n\n _defineProperty(this, \"cacheCallTimes\", void 0);\n\n this.cache = new Map();\n this.keys = [];\n this.cacheCallTimes = 0;\n }\n\n _createClass(ThemeCache, [{\n key: \"size\",\n value: function size() {\n return this.keys.length;\n }\n }, {\n key: \"internalGet\",\n value: function internalGet(derivativeOption) {\n var _cache2, _cache3;\n\n var updateCallTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var cache = {\n map: this.cache\n };\n derivativeOption.forEach(function (derivative) {\n if (!cache) {\n cache = undefined;\n } else {\n var _cache, _cache$map;\n\n cache = (_cache = cache) === null || _cache === void 0 ? void 0 : (_cache$map = _cache.map) === null || _cache$map === void 0 ? void 0 : _cache$map.get(derivative);\n }\n });\n\n if ((_cache2 = cache) !== null && _cache2 !== void 0 && _cache2.value && updateCallTimes) {\n cache.value[1] = this.cacheCallTimes++;\n }\n\n return (_cache3 = cache) === null || _cache3 === void 0 ? void 0 : _cache3.value;\n }\n }, {\n key: \"get\",\n value: function get(derivativeOption) {\n var _this$internalGet;\n\n return (_this$internalGet = this.internalGet(derivativeOption, true)) === null || _this$internalGet === void 0 ? void 0 : _this$internalGet[0];\n }\n }, {\n key: \"has\",\n value: function has(derivativeOption) {\n return !!this.internalGet(derivativeOption);\n }\n }, {\n key: \"set\",\n value: function set(derivativeOption, value) {\n var _this = this;\n\n // New cache\n if (!this.has(derivativeOption)) {\n if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) {\n var _this$keys$reduce = this.keys.reduce(function (result, key) {\n var _result = _slicedToArray(result, 2),\n callTimes = _result[1];\n\n if (_this.internalGet(key)[1] < callTimes) {\n return [key, _this.internalGet(key)[1]];\n }\n\n return result;\n }, [this.keys[0], this.cacheCallTimes]),\n _this$keys$reduce2 = _slicedToArray(_this$keys$reduce, 1),\n targetKey = _this$keys$reduce2[0];\n\n this.delete(targetKey);\n }\n\n this.keys.push(derivativeOption);\n }\n\n var cache = this.cache;\n derivativeOption.forEach(function (derivative, index) {\n if (index === derivativeOption.length - 1) {\n cache.set(derivative, {\n value: [value, _this.cacheCallTimes++]\n });\n } else {\n var cacheValue = cache.get(derivative);\n\n if (!cacheValue) {\n cache.set(derivative, {\n map: new Map()\n });\n } else if (!cacheValue.map) {\n cacheValue.map = new Map();\n }\n\n cache = cache.get(derivative).map;\n }\n });\n }\n }, {\n key: \"deleteByPath\",\n value: function deleteByPath(currentCache, derivatives) {\n var cache = currentCache.get(derivatives[0]);\n\n if (derivatives.length === 1) {\n var _cache$value;\n\n if (!cache.map) {\n currentCache.delete(derivatives[0]);\n } else {\n currentCache.set(derivatives[0], {\n map: cache.map\n });\n }\n\n return (_cache$value = cache.value) === null || _cache$value === void 0 ? void 0 : _cache$value[0];\n }\n\n var result = this.deleteByPath(cache.map, derivatives.slice(1));\n\n if ((!cache.map || cache.map.size === 0) && !cache.value) {\n currentCache.delete(derivatives[0]);\n }\n\n return result;\n }\n }, {\n key: \"delete\",\n value: function _delete(derivativeOption) {\n // If cache exists\n if (this.has(derivativeOption)) {\n this.keys = this.keys.filter(function (item) {\n return !sameDerivativeOption(item, derivativeOption);\n });\n return this.deleteByPath(this.cache, derivativeOption);\n }\n\n return undefined;\n }\n }]);\n\n return ThemeCache;\n}();\n\n_defineProperty(ThemeCache, \"MAX_CACHE_SIZE\", 20);\n\n_defineProperty(ThemeCache, \"MAX_CACHE_OFFSET\", 5);\n\nexport { ThemeCache as default };","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { warning } from \"rc-util/es/warning\";\nvar uuid = 0;\n/**\n * Theme with algorithms to derive tokens from design tokens.\n * Use `createTheme` first which will help to manage the theme instance cache.\n */\n\nvar Theme = /*#__PURE__*/function () {\n function Theme(derivatives) {\n _classCallCheck(this, Theme);\n\n _defineProperty(this, \"derivatives\", void 0);\n\n _defineProperty(this, \"id\", void 0);\n\n this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives];\n this.id = uuid;\n\n if (derivatives.length === 0) {\n warning(derivatives.length > 0, '[Ant Design CSS-in-JS] Theme should have at least one derivative function.');\n }\n\n uuid += 1;\n }\n\n _createClass(Theme, [{\n key: \"getDerivativeToken\",\n value: function getDerivativeToken(token) {\n return this.derivatives.reduce(function (result, derivative) {\n return derivative(token, result);\n }, undefined);\n }\n }]);\n\n return Theme;\n}();\n\nexport { Theme as default };","import ThemeCache from \"./ThemeCache\";\nimport Theme from \"./Theme\";\nvar cacheThemes = new ThemeCache();\n/**\n * Same as new Theme, but will always return same one if `derivative` not changed.\n */\n\nexport default function createTheme(derivatives) {\n var derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives]; // Create new theme if not exist\n\n if (!cacheThemes.has(derivativeArr)) {\n cacheThemes.set(derivativeArr, new Theme(derivativeArr));\n } // Get theme from cache and return\n\n\n return cacheThemes.get(derivativeArr);\n}","function splitValues(value) {\n if (typeof value === 'number') {\n return [value];\n }\n\n var splitStyle = String(value).split(/\\s+/); // Combine styles split in brackets, like `calc(1px + 2px)`\n\n var temp = '';\n var brackets = 0;\n return splitStyle.reduce(function (list, item) {\n if (item.includes('(')) {\n temp += item;\n brackets += item.split('(').length - 1;\n } else if (item.includes(')')) {\n temp += item;\n brackets -= item.split(')').length - 1;\n\n if (brackets === 0) {\n list.push(temp);\n temp = '';\n }\n } else if (brackets > 0) {\n temp += item;\n } else {\n list.push(item);\n }\n\n return list;\n }, []);\n}\n\nfunction noSplit(list) {\n list.notSplit = true;\n return list;\n}\n\nvar keyMap = {\n // Inset\n inset: ['top', 'right', 'bottom', 'left'],\n insetBlock: ['top', 'bottom'],\n insetBlockStart: ['top'],\n insetBlockEnd: ['bottom'],\n insetInline: ['left', 'right'],\n insetInlineStart: ['left'],\n insetInlineEnd: ['right'],\n // Margin\n marginBlock: ['marginTop', 'marginBottom'],\n marginBlockStart: ['marginTop'],\n marginBlockEnd: ['marginBottom'],\n marginInline: ['marginLeft', 'marginRight'],\n marginInlineStart: ['marginLeft'],\n marginInlineEnd: ['marginRight'],\n // Padding\n paddingBlock: ['paddingTop', 'paddingBottom'],\n paddingBlockStart: ['paddingTop'],\n paddingBlockEnd: ['paddingBottom'],\n paddingInline: ['paddingLeft', 'paddingRight'],\n paddingInlineStart: ['paddingLeft'],\n paddingInlineEnd: ['paddingRight'],\n // Border\n borderBlock: noSplit(['borderTop', 'borderBottom']),\n borderBlockStart: noSplit(['borderTop']),\n borderBlockEnd: noSplit(['borderBottom']),\n borderInline: noSplit(['borderLeft', 'borderRight']),\n borderInlineStart: noSplit(['borderLeft']),\n borderInlineEnd: noSplit(['borderRight']),\n // Border width\n borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n borderBlockStartWidth: ['borderTopWidth'],\n borderBlockEndWidth: ['borderBottomWidth'],\n borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'],\n borderInlineStartWidth: ['borderLeftWidth'],\n borderInlineEndWidth: ['borderRightWidth'],\n // Border style\n borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n borderBlockStartStyle: ['borderTopStyle'],\n borderBlockEndStyle: ['borderBottomStyle'],\n borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'],\n borderInlineStartStyle: ['borderLeftStyle'],\n borderInlineEndStyle: ['borderRightStyle'],\n // Border color\n borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n borderBlockStartColor: ['borderTopColor'],\n borderBlockEndColor: ['borderBottomColor'],\n borderInlineColor: ['borderLeftColor', 'borderRightColor'],\n borderInlineStartColor: ['borderLeftColor'],\n borderInlineEndColor: ['borderRightColor'],\n // Border radius\n borderStartStartRadius: ['borderTopLeftRadius'],\n borderStartEndRadius: ['borderTopRightRadius'],\n borderEndStartRadius: ['borderBottomLeftRadius'],\n borderEndEndRadius: ['borderBottomRightRadius']\n};\n\nfunction skipCheck(value) {\n return {\n _skip_check_: true,\n value: value\n };\n}\n/**\n * Convert css logical properties to legacy properties.\n * Such as: `margin-block-start` to `margin-top`.\n * Transform list:\n * - inset\n * - margin\n * - padding\n * - border\n */\n\n\nvar transform = {\n visit: function visit(cssObj) {\n var clone = {};\n Object.keys(cssObj).forEach(function (key) {\n var value = cssObj[key];\n var matchValue = keyMap[key];\n\n if (matchValue && (typeof value === 'number' || typeof value === 'string')) {\n var values = splitValues(value);\n\n if (matchValue.length && matchValue.notSplit) {\n // not split means always give same value like border\n matchValue.forEach(function (matchKey) {\n clone[matchKey] = skipCheck(value);\n });\n } else if (matchValue.length === 1) {\n // Handle like `marginBlockStart` => `marginTop`\n clone[matchValue[0]] = skipCheck(value);\n } else if (matchValue.length === 2) {\n // Handle like `marginBlock` => `marginTop` & `marginBottom`\n matchValue.forEach(function (matchKey, index) {\n var _values$index;\n\n clone[matchKey] = skipCheck((_values$index = values[index]) !== null && _values$index !== void 0 ? _values$index : values[0]);\n });\n } else if (matchValue.length === 4) {\n // Handle like `inset` => `top` & `right` & `bottom` & `left`\n matchValue.forEach(function (matchKey, index) {\n var _ref, _values$index2;\n\n clone[matchKey] = skipCheck((_ref = (_values$index2 = values[index]) !== null && _values$index2 !== void 0 ? _values$index2 : values[index - 2]) !== null && _ref !== void 0 ? _ref : values[0]);\n });\n } else {\n clone[key] = value;\n }\n } else {\n clone[key] = value;\n }\n });\n return clone;\n }\n};\nexport default transform;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { generate as generateColor } from '@ant-design/colors';\nimport React, { useContext, useEffect } from 'react';\nimport warn from \"rc-util/es/warning\";\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport IconContext from './components/Context';\nexport function warning(valid, message) {\n warn(valid, \"[@ant-design/icons] \".concat(message));\n}\nexport function isIconDefinition(target) {\n return _typeof(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && (_typeof(target.icon) === 'object' || typeof target.icon === 'function');\n}\nexport function normalizeAttrs() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.keys(attrs).reduce(function (acc, key) {\n var val = attrs[key];\n switch (key) {\n case 'class':\n acc.className = val;\n delete acc.class;\n break;\n default:\n acc[key] = val;\n }\n return acc;\n }, {});\n}\nexport function generate(node, key, rootProps) {\n if (!rootProps) {\n return /*#__PURE__*/React.createElement(node.tag, _objectSpread({\n key: key\n }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n }\n return /*#__PURE__*/React.createElement(node.tag, _objectSpread(_objectSpread({\n key: key\n }, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {\n return generate(child, \"\".concat(key, \"-\").concat(node.tag, \"-\").concat(index));\n }));\n}\nexport function getSecondaryColor(primaryColor) {\n // choose the second color\n return generateColor(primaryColor)[0];\n}\nexport function normalizeTwoToneColors(twoToneColor) {\n if (!twoToneColor) {\n return [];\n }\n return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];\n}\n// These props make sure that the SVG behaviours like general text.\n// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\nexport var svgBaseProps = {\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true',\n focusable: 'false'\n};\nexport var iconStyles = \"\\n.anticon {\\n display: inline-block;\\n color: inherit;\\n font-style: normal;\\n line-height: 0;\\n text-align: center;\\n text-transform: none;\\n vertical-align: -0.125em;\\n text-rendering: optimizeLegibility;\\n -webkit-font-smoothing: antialiased;\\n -moz-osx-font-smoothing: grayscale;\\n}\\n\\n.anticon > * {\\n line-height: 1;\\n}\\n\\n.anticon svg {\\n display: inline-block;\\n}\\n\\n.anticon::before {\\n display: none;\\n}\\n\\n.anticon .anticon-icon {\\n display: block;\\n}\\n\\n.anticon[tabindex] {\\n cursor: pointer;\\n}\\n\\n.anticon-spin::before,\\n.anticon-spin {\\n display: inline-block;\\n -webkit-animation: loadingCircle 1s infinite linear;\\n animation: loadingCircle 1s infinite linear;\\n}\\n\\n@-webkit-keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes loadingCircle {\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\";\nexport var useInsertStyles = function useInsertStyles() {\n var styleStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : iconStyles;\n var _useContext = useContext(IconContext),\n csp = _useContext.csp,\n prefixCls = _useContext.prefixCls;\n var mergedStyleStr = styleStr;\n if (prefixCls) {\n mergedStyleStr = mergedStyleStr.replace(/anticon/g, prefixCls);\n }\n useEffect(function () {\n updateCSS(mergedStyleStr, '@ant-design-icons', {\n prepend: true,\n csp: csp\n });\n }, []);\n};","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar _excluded = [\"icon\", \"className\", \"onClick\", \"style\", \"primaryColor\", \"secondaryColor\"];\nimport { generate, getSecondaryColor, isIconDefinition, warning, useInsertStyles } from '../utils';\nvar twoToneColorPalette = {\n primaryColor: '#333',\n secondaryColor: '#E6E6E6',\n calculated: false\n};\nfunction setTwoToneColors(_ref) {\n var primaryColor = _ref.primaryColor,\n secondaryColor = _ref.secondaryColor;\n twoToneColorPalette.primaryColor = primaryColor;\n twoToneColorPalette.secondaryColor = secondaryColor || getSecondaryColor(primaryColor);\n twoToneColorPalette.calculated = !!secondaryColor;\n}\nfunction getTwoToneColors() {\n return _objectSpread({}, twoToneColorPalette);\n}\nvar IconBase = function IconBase(props) {\n var icon = props.icon,\n className = props.className,\n onClick = props.onClick,\n style = props.style,\n primaryColor = props.primaryColor,\n secondaryColor = props.secondaryColor,\n restProps = _objectWithoutProperties(props, _excluded);\n var colors = twoToneColorPalette;\n if (primaryColor) {\n colors = {\n primaryColor: primaryColor,\n secondaryColor: secondaryColor || getSecondaryColor(primaryColor)\n };\n }\n useInsertStyles();\n warning(isIconDefinition(icon), \"icon should be icon definiton, but got \".concat(icon));\n if (!isIconDefinition(icon)) {\n return null;\n }\n var target = icon;\n if (target && typeof target.icon === 'function') {\n target = _objectSpread(_objectSpread({}, target), {}, {\n icon: target.icon(colors.primaryColor, colors.secondaryColor)\n });\n }\n return generate(target.icon, \"svg-\".concat(target.name), _objectSpread({\n className: className,\n onClick: onClick,\n style: style,\n 'data-icon': target.name,\n width: '1em',\n height: '1em',\n fill: 'currentColor',\n 'aria-hidden': 'true'\n }, restProps));\n};\nIconBase.displayName = 'IconReact';\nIconBase.getTwoToneColors = getTwoToneColors;\nIconBase.setTwoToneColors = setTwoToneColors;\nexport default IconBase;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ReactIcon from './IconBase';\nimport { normalizeTwoToneColors } from '../utils';\nexport function setTwoToneColor(twoToneColor) {\n var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return ReactIcon.setTwoToneColors({\n primaryColor: primaryColor,\n secondaryColor: secondaryColor\n });\n}\nexport function getTwoToneColor() {\n var colors = ReactIcon.getTwoToneColors();\n if (!colors.calculated) {\n return colors.primaryColor;\n }\n return [colors.primaryColor, colors.secondaryColor];\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"icon\", \"spin\", \"rotate\", \"tabIndex\", \"onClick\", \"twoToneColor\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport Context from './Context';\nimport ReactIcon from './IconBase';\nimport { getTwoToneColor, setTwoToneColor } from './twoTonePrimaryColor';\nimport { normalizeTwoToneColors } from '../utils';\n// Initial setting\n// should move it to antd main repo?\nsetTwoToneColor('#1890ff');\nvar Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _classNames;\n var className = props.className,\n icon = props.icon,\n spin = props.spin,\n rotate = props.rotate,\n tabIndex = props.tabIndex,\n onClick = props.onClick,\n twoToneColor = props.twoToneColor,\n restProps = _objectWithoutProperties(props, _excluded);\n var _React$useContext = React.useContext(Context),\n _React$useContext$pre = _React$useContext.prefixCls,\n prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,\n rootClassName = _React$useContext.rootClassName;\n var classString = classNames(rootClassName, prefixCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(prefixCls, \"-\").concat(icon.name), !!icon.name), _defineProperty(_classNames, \"\".concat(prefixCls, \"-spin\"), !!spin || icon.name === 'loading'), _classNames), className);\n var iconTabIndex = tabIndex;\n if (iconTabIndex === undefined && onClick) {\n iconTabIndex = -1;\n }\n var svgStyle = rotate ? {\n msTransform: \"rotate(\".concat(rotate, \"deg)\"),\n transform: \"rotate(\".concat(rotate, \"deg)\")\n } : undefined;\n var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor),\n _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2),\n primaryColor = _normalizeTwoToneColo2[0],\n secondaryColor = _normalizeTwoToneColo2[1];\n return /*#__PURE__*/React.createElement(\"span\", _objectSpread(_objectSpread({\n role: \"img\",\n \"aria-label\": icon.name\n }, restProps), {}, {\n ref: ref,\n tabIndex: iconTabIndex,\n onClick: onClick,\n className: classString\n }), /*#__PURE__*/React.createElement(ReactIcon, {\n icon: icon,\n primaryColor: primaryColor,\n secondaryColor: secondaryColor,\n style: svgStyle\n }));\n});\nIcon.displayName = 'AntdIcon';\nIcon.getTwoToneColor = getTwoToneColor;\nIcon.setTwoToneColor = setTwoToneColor;\nexport default Icon;","import { createContext } from 'react';\nvar IconContext = /*#__PURE__*/createContext({});\nexport default IconContext;","// This icon file is generated automatically.\nvar CheckCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z\" } }] }, \"name\": \"check-circle\", \"theme\": \"filled\" };\nexport default CheckCircleFilled;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CheckCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CheckCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\nvar CheckCircleFilled = function CheckCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: CheckCircleFilledSvg\n }));\n};\nCheckCircleFilled.displayName = 'CheckCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(CheckCircleFilled);","// This icon file is generated automatically.\nvar CheckOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z\" } }] }, \"name\": \"check\", \"theme\": \"outlined\" };\nexport default CheckOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CheckOutlinedSvg from \"@ant-design/icons-svg/es/asn/CheckOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar CheckOutlined = function CheckOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: CheckOutlinedSvg\n }));\n};\nCheckOutlined.displayName = 'CheckOutlined';\nexport default /*#__PURE__*/React.forwardRef(CheckOutlined);","// This icon file is generated automatically.\nvar CloseCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 01-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z\" } }] }, \"name\": \"close-circle\", \"theme\": \"filled\" };\nexport default CloseCircleFilled;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CloseCircleFilledSvg from \"@ant-design/icons-svg/es/asn/CloseCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\nvar CloseCircleFilled = function CloseCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: CloseCircleFilledSvg\n }));\n};\nCloseCircleFilled.displayName = 'CloseCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(CloseCircleFilled);","// This icon file is generated automatically.\nvar CloseOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\" } }] }, \"name\": \"close\", \"theme\": \"outlined\" };\nexport default CloseOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CloseOutlinedSvg from \"@ant-design/icons-svg/es/asn/CloseOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar CloseOutlined = function CloseOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: CloseOutlinedSvg\n }));\n};\nCloseOutlined.displayName = 'CloseOutlined';\nexport default /*#__PURE__*/React.forwardRef(CloseOutlined);","// This icon file is generated automatically.\nvar ExclamationCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"exclamation-circle\", \"theme\": \"filled\" };\nexport default ExclamationCircleFilled;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport ExclamationCircleFilledSvg from \"@ant-design/icons-svg/es/asn/ExclamationCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\nvar ExclamationCircleFilled = function ExclamationCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: ExclamationCircleFilledSvg\n }));\n};\nExclamationCircleFilled.displayName = 'ExclamationCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(ExclamationCircleFilled);","// This icon file is generated automatically.\nvar EyeOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z\" } }] }, \"name\": \"eye\", \"theme\": \"outlined\" };\nexport default EyeOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport EyeOutlinedSvg from \"@ant-design/icons-svg/es/asn/EyeOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar EyeOutlined = function EyeOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: EyeOutlinedSvg\n }));\n};\nEyeOutlined.displayName = 'EyeOutlined';\nexport default /*#__PURE__*/React.forwardRef(EyeOutlined);","// This icon file is generated automatically.\nvar InfoCircleFilled = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z\" } }] }, \"name\": \"info-circle\", \"theme\": \"filled\" };\nexport default InfoCircleFilled;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport InfoCircleFilledSvg from \"@ant-design/icons-svg/es/asn/InfoCircleFilled\";\nimport AntdIcon from '../components/AntdIcon';\nvar InfoCircleFilled = function InfoCircleFilled(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: InfoCircleFilledSvg\n }));\n};\nInfoCircleFilled.displayName = 'InfoCircleFilled';\nexport default /*#__PURE__*/React.forwardRef(InfoCircleFilled);","// This icon file is generated automatically.\nvar LeftOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z\" } }] }, \"name\": \"left\", \"theme\": \"outlined\" };\nexport default LeftOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport LeftOutlinedSvg from \"@ant-design/icons-svg/es/asn/LeftOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar LeftOutlined = function LeftOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: LeftOutlinedSvg\n }));\n};\nLeftOutlined.displayName = 'LeftOutlined';\nexport default /*#__PURE__*/React.forwardRef(LeftOutlined);","// This icon file is generated automatically.\nvar LoadingOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"0 0 1024 1024\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z\" } }] }, \"name\": \"loading\", \"theme\": \"outlined\" };\nexport default LoadingOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport LoadingOutlinedSvg from \"@ant-design/icons-svg/es/asn/LoadingOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar LoadingOutlined = function LoadingOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: LoadingOutlinedSvg\n }));\n};\nLoadingOutlined.displayName = 'LoadingOutlined';\nexport default /*#__PURE__*/React.forwardRef(LoadingOutlined);","// This icon file is generated automatically.\nvar RightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M765.7 486.8L314.9 134.7A7.97 7.97 0 00302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 000-50.4z\" } }] }, \"name\": \"right\", \"theme\": \"outlined\" };\nexport default RightOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport RightOutlinedSvg from \"@ant-design/icons-svg/es/asn/RightOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar RightOutlined = function RightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: RightOutlinedSvg\n }));\n};\nRightOutlined.displayName = 'RightOutlined';\nexport default /*#__PURE__*/React.forwardRef(RightOutlined);","// This icon file is generated automatically.\nvar RotateLeftOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H188V494h440v326z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7.4 12.6-6.1v-63.9c12.9.1 25.9.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8a325.95 325.95 0 016.5 140.9h74.9c14.8-103.6-11.3-213-81-302.3z\" } }] }, \"name\": \"rotate-left\", \"theme\": \"outlined\" };\nexport default RotateLeftOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport RotateLeftOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateLeftOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar RotateLeftOutlined = function RotateLeftOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: RotateLeftOutlinedSvg\n }));\n};\nRotateLeftOutlined.displayName = 'RotateLeftOutlined';\nexport default /*#__PURE__*/React.forwardRef(RotateLeftOutlined);","import { bound01, pad2 } from './util';\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// \n/**\n * Handle bounds / percentage checking to conform to CSS color spec\n * \n * *Assumes:* r, g, b in [0, 255] or [0, 1]\n * *Returns:* { r, g, b } in [0, 255]\n */\nexport function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255,\n };\n}\n/**\n * Converts an RGB color value to HSL.\n * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n * *Returns:* { h, s, l } in [0,1]\n */\nexport function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var s = 0;\n var l = (max + min) / 2;\n if (max === min) {\n s = 0;\n h = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, l: l };\n}\nfunction hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * (6 * t);\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n}\n/**\n * Converts an HSL color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hslToRgb(h, s, l) {\n var r;\n var g;\n var b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n if (s === 0) {\n // achromatic\n g = l;\n b = l;\n r = l;\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color value to HSV\n *\n * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n * *Returns:* { h, s, v } in [0,1]\n */\nexport function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = 0;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0; // achromatic\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n/**\n * Converts an HSV color value to RGB.\n *\n * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n * *Returns:* { r, g, b } in the set [0, 255]\n */\nexport function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n/**\n * Converts an RGB color to hex\n *\n * Assumes r, g, and b are contained in the set [0, 255]\n * Returns a 3 or 6 character hex\n */\nexport function rgbToHex(r, g, b, allow3Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n // Return a 3 character hex if possible\n if (allow3Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color plus alpha transparency to hex\n *\n * Assumes r, g, b are contained in the set [0, 255] and\n * a in [0, 1]. Returns a 4 or 8 character rgba hex\n */\n// eslint-disable-next-line max-params\nexport function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n pad2(convertDecimalToHex(a)),\n ];\n // Return a 4 character hex if possible\n if (allow4Char &&\n hex[0].startsWith(hex[0].charAt(1)) &&\n hex[1].startsWith(hex[1].charAt(1)) &&\n hex[2].startsWith(hex[2].charAt(1)) &&\n hex[3].startsWith(hex[3].charAt(1))) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join('');\n}\n/**\n * Converts an RGBA color to an ARGB Hex8 string\n * Rarely used, but required for \"toFilter()\"\n */\nexport function rgbaToArgbHex(r, g, b, a) {\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(Math.round(r).toString(16)),\n pad2(Math.round(g).toString(16)),\n pad2(Math.round(b).toString(16)),\n ];\n return hex.join('');\n}\n/** Converts a decimal to a hex value */\nexport function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n/** Converts a hex value to a decimal */\nexport function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\n/** Parse a base-16 hex value into a base-10 integer */\nexport function parseIntFromHex(val) {\n return parseInt(val, 16);\n}\nexport function numberInputToObject(color) {\n return {\n r: color >> 16,\n g: (color & 0xff00) >> 8,\n b: color & 0xff,\n };\n}\n","// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json\n/**\n * @hidden\n */\nexport var names = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n goldenrod: '#daa520',\n gold: '#ffd700',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n lavenderblush: '#fff0f5',\n lavender: '#e6e6fa',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32',\n};\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nimport { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb } from './conversion';\nimport { names } from './css-color-names';\nimport { boundAlpha, convertToPercentage } from './util';\n/**\n * Given a string or object, convert that input to RGB\n *\n * Possible string inputs:\n * ```\n * \"red\"\n * \"#f00\" or \"f00\"\n * \"#ff0000\" or \"ff0000\"\n * \"#ff000000\" or \"ff000000\"\n * \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n * \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n * \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n * \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n * \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n * \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n * \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n * ```\n */\nexport function inputToRGB(color) {\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color === 'string') {\n color = stringInputToObject(color);\n }\n if (typeof color === 'object') {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = 'hsv';\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = 'hsl';\n }\n if (Object.prototype.hasOwnProperty.call(color, 'a')) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a,\n };\n}\n// \nvar CSS_INTEGER = '[-\\\\+]?\\\\d+%?';\n// \nvar CSS_NUMBER = '[-\\\\+]?\\\\d*\\\\.\\\\d+%?';\n// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\nvar CSS_UNIT = \"(?:\".concat(CSS_NUMBER, \")|(?:\").concat(CSS_INTEGER, \")\");\n// Actual matching.\n// Parentheses and commas are optional, but not required.\n// Whitespace can take the place of commas or opening paren\nvar PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\".concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")[,|\\\\s]+(\").concat(CSS_UNIT, \")\\\\s*\\\\)?\");\nvar matchers = {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),\n rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),\n hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),\n hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),\n hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),\n hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n};\n/**\n * Permissive string parsing. Take in a number of formats, and output an object\n * based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n */\nexport function stringInputToObject(color) {\n color = color.trim().toLowerCase();\n if (color.length === 0) {\n return false;\n }\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color === 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: 'name' };\n }\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match = matchers.rgb.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n match = matchers.rgba.exec(color);\n if (match) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n match = matchers.hsl.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n match = matchers.hsla.exec(color);\n if (match) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n match = matchers.hsv.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n match = matchers.hsva.exec(color);\n if (match) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n match = matchers.hex8.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex6.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n match = matchers.hex4.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n a: convertHexToDecimal(match[4] + match[4]),\n format: named ? 'name' : 'hex8',\n };\n }\n match = matchers.hex3.exec(color);\n if (match) {\n return {\n r: parseIntFromHex(match[1] + match[1]),\n g: parseIntFromHex(match[2] + match[2]),\n b: parseIntFromHex(match[3] + match[3]),\n format: named ? 'name' : 'hex',\n };\n }\n return false;\n}\n/**\n * Check to see if it looks like a CSS unit\n * (see `matchers` above for definition).\n */\nexport function isValidCSSUnit(color) {\n return Boolean(matchers.CSS_UNIT.exec(String(color)));\n}\n","import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion';\nimport { names } from './css-color-names';\nimport { inputToRGB } from './format-input';\nimport { bound01, boundAlpha, clamp01 } from './util';\nvar TinyColor = /** @class */ (function () {\n function TinyColor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n var _a;\n // If input is already a tinycolor, return itself\n if (color instanceof TinyColor) {\n // eslint-disable-next-line no-constructor-return\n return color;\n }\n if (typeof color === 'number') {\n color = numberInputToObject(color);\n }\n this.originalInput = color;\n var rgb = inputToRGB(color);\n this.originalInput = color;\n this.r = rgb.r;\n this.g = rgb.g;\n this.b = rgb.b;\n this.a = rgb.a;\n this.roundA = Math.round(100 * this.a) / 100;\n this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;\n this.gradientType = opts.gradientType;\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this.r < 1) {\n this.r = Math.round(this.r);\n }\n if (this.g < 1) {\n this.g = Math.round(this.g);\n }\n if (this.b < 1) {\n this.b = Math.round(this.b);\n }\n this.isValid = rgb.ok;\n }\n TinyColor.prototype.isDark = function () {\n return this.getBrightness() < 128;\n };\n TinyColor.prototype.isLight = function () {\n return !this.isDark();\n };\n /**\n * Returns the perceived brightness of the color, from 0-255.\n */\n TinyColor.prototype.getBrightness = function () {\n // http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n };\n /**\n * Returns the perceived luminance of a color, from 0-1.\n */\n TinyColor.prototype.getLuminance = function () {\n // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var R;\n var G;\n var B;\n var RsRGB = rgb.r / 255;\n var GsRGB = rgb.g / 255;\n var BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n }\n else {\n // eslint-disable-next-line prefer-exponentiation-operator\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n };\n /**\n * Returns the alpha value of a color, from 0-1.\n */\n TinyColor.prototype.getAlpha = function () {\n return this.a;\n };\n /**\n * Sets the alpha value on the current color.\n *\n * @param alpha - The new alpha value. The accepted range is 0-1.\n */\n TinyColor.prototype.setAlpha = function (alpha) {\n this.a = boundAlpha(alpha);\n this.roundA = Math.round(100 * this.a) / 100;\n return this;\n };\n /**\n * Returns whether the color is monochrome.\n */\n TinyColor.prototype.isMonochrome = function () {\n var s = this.toHsl().s;\n return s === 0;\n };\n /**\n * Returns the object as a HSVA object.\n */\n TinyColor.prototype.toHsv = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };\n };\n /**\n * Returns the hsva values interpolated into a string with the following format:\n * \"hsva(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHsvString = function () {\n var hsv = rgbToHsv(this.r, this.g, this.b);\n var h = Math.round(hsv.h * 360);\n var s = Math.round(hsv.s * 100);\n var v = Math.round(hsv.v * 100);\n return this.a === 1 ? \"hsv(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%)\") : \"hsva(\".concat(h, \", \").concat(s, \"%, \").concat(v, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a HSLA object.\n */\n TinyColor.prototype.toHsl = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };\n };\n /**\n * Returns the hsla values interpolated into a string with the following format:\n * \"hsla(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toHslString = function () {\n var hsl = rgbToHsl(this.r, this.g, this.b);\n var h = Math.round(hsl.h * 360);\n var s = Math.round(hsl.s * 100);\n var l = Math.round(hsl.l * 100);\n return this.a === 1 ? \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\") : \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(this.roundA, \")\");\n };\n /**\n * Returns the hex value of the color.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHex = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return rgbToHex(this.r, this.g, this.b, allow3Char);\n };\n /**\n * Returns the hex value of the color -with a # appened.\n * @param allow3Char will shorten hex value to 3 char if possible\n */\n TinyColor.prototype.toHexString = function (allow3Char) {\n if (allow3Char === void 0) { allow3Char = false; }\n return '#' + this.toHex(allow3Char);\n };\n /**\n * Returns the hex 8 value of the color.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8 = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char);\n };\n /**\n * Returns the hex 8 value of the color -with a # appened.\n * @param allow4Char will shorten hex value to 4 char if possible\n */\n TinyColor.prototype.toHex8String = function (allow4Char) {\n if (allow4Char === void 0) { allow4Char = false; }\n return '#' + this.toHex8(allow4Char);\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toRgb = function () {\n return {\n r: Math.round(this.r),\n g: Math.round(this.g),\n b: Math.round(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA values interpolated into a string with the following format:\n * \"RGBA(xxx, xxx, xxx, xx)\".\n */\n TinyColor.prototype.toRgbString = function () {\n var r = Math.round(this.r);\n var g = Math.round(this.g);\n var b = Math.round(this.b);\n return this.a === 1 ? \"rgb(\".concat(r, \", \").concat(g, \", \").concat(b, \")\") : \"rgba(\".concat(r, \", \").concat(g, \", \").concat(b, \", \").concat(this.roundA, \")\");\n };\n /**\n * Returns the object as a RGBA object.\n */\n TinyColor.prototype.toPercentageRgb = function () {\n var fmt = function (x) { return \"\".concat(Math.round(bound01(x, 255) * 100), \"%\"); };\n return {\n r: fmt(this.r),\n g: fmt(this.g),\n b: fmt(this.b),\n a: this.a,\n };\n };\n /**\n * Returns the RGBA relative values interpolated into a string\n */\n TinyColor.prototype.toPercentageRgbString = function () {\n var rnd = function (x) { return Math.round(bound01(x, 255) * 100); };\n return this.a === 1\n ? \"rgb(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%)\")\n : \"rgba(\".concat(rnd(this.r), \"%, \").concat(rnd(this.g), \"%, \").concat(rnd(this.b), \"%, \").concat(this.roundA, \")\");\n };\n /**\n * The 'real' name of the color -if there is one.\n */\n TinyColor.prototype.toName = function () {\n if (this.a === 0) {\n return 'transparent';\n }\n if (this.a < 1) {\n return false;\n }\n var hex = '#' + rgbToHex(this.r, this.g, this.b, false);\n for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n if (hex === value) {\n return key;\n }\n }\n return false;\n };\n TinyColor.prototype.toString = function (format) {\n var formatSet = Boolean(format);\n format = format !== null && format !== void 0 ? format : this.format;\n var formattedString = false;\n var hasAlpha = this.a < 1 && this.a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === 'name' && this.a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === 'rgb') {\n formattedString = this.toRgbString();\n }\n if (format === 'prgb') {\n formattedString = this.toPercentageRgbString();\n }\n if (format === 'hex' || format === 'hex6') {\n formattedString = this.toHexString();\n }\n if (format === 'hex3') {\n formattedString = this.toHexString(true);\n }\n if (format === 'hex4') {\n formattedString = this.toHex8String(true);\n }\n if (format === 'hex8') {\n formattedString = this.toHex8String();\n }\n if (format === 'name') {\n formattedString = this.toName();\n }\n if (format === 'hsl') {\n formattedString = this.toHslString();\n }\n if (format === 'hsv') {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n };\n TinyColor.prototype.toNumber = function () {\n return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);\n };\n TinyColor.prototype.clone = function () {\n return new TinyColor(this.toString());\n };\n /**\n * Lighten the color a given amount. Providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.lighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Brighten the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.brighten = function (amount) {\n if (amount === void 0) { amount = 10; }\n var rgb = this.toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return new TinyColor(rgb);\n };\n /**\n * Darken the color a given amount, from 0 to 100.\n * Providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.darken = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return new TinyColor(hsl);\n };\n /**\n * Mix the color with pure white, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return white.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.tint = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('white', amount);\n };\n /**\n * Mix the color with pure black, from 0 to 100.\n * Providing 0 will do nothing, providing 100 will always return black.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.shade = function (amount) {\n if (amount === void 0) { amount = 10; }\n return this.mix('black', amount);\n };\n /**\n * Desaturate the color a given amount, from 0 to 100.\n * Providing 100 will is the same as calling greyscale\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.desaturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Saturate the color a given amount, from 0 to 100.\n * @param amount - valid between 1-100\n */\n TinyColor.prototype.saturate = function (amount) {\n if (amount === void 0) { amount = 10; }\n var hsl = this.toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return new TinyColor(hsl);\n };\n /**\n * Completely desaturates a color into greyscale.\n * Same as calling `desaturate(100)`\n */\n TinyColor.prototype.greyscale = function () {\n return this.desaturate(100);\n };\n /**\n * Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n * Values outside of this range will be wrapped into this range.\n */\n TinyColor.prototype.spin = function (amount) {\n var hsl = this.toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return new TinyColor(hsl);\n };\n /**\n * Mix the current color a given amount with another color, from 0 to 100.\n * 0 means no mixing (return current color).\n */\n TinyColor.prototype.mix = function (color, amount) {\n if (amount === void 0) { amount = 50; }\n var rgb1 = this.toRgb();\n var rgb2 = new TinyColor(color).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a,\n };\n return new TinyColor(rgba);\n };\n TinyColor.prototype.analogous = function (results, slices) {\n if (results === void 0) { results = 6; }\n if (slices === void 0) { slices = 30; }\n var hsl = this.toHsl();\n var part = 360 / slices;\n var ret = [this];\n for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(new TinyColor(hsl));\n }\n return ret;\n };\n /**\n * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js\n */\n TinyColor.prototype.complement = function () {\n var hsl = this.toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return new TinyColor(hsl);\n };\n TinyColor.prototype.monochromatic = function (results) {\n if (results === void 0) { results = 6; }\n var hsv = this.toHsv();\n var h = hsv.h;\n var s = hsv.s;\n var v = hsv.v;\n var res = [];\n var modification = 1 / results;\n while (results--) {\n res.push(new TinyColor({ h: h, s: s, v: v }));\n v = (v + modification) % 1;\n }\n return res;\n };\n TinyColor.prototype.splitcomplement = function () {\n var hsl = this.toHsl();\n var h = hsl.h;\n return [\n this,\n new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),\n new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),\n ];\n };\n /**\n * Compute how the color would appear on a background\n */\n TinyColor.prototype.onBackground = function (background) {\n var fg = this.toRgb();\n var bg = new TinyColor(background).toRgb();\n var alpha = fg.a + bg.a * (1 - fg.a);\n return new TinyColor({\n r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha,\n g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha,\n b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha,\n a: alpha,\n });\n };\n /**\n * Alias for `polyad(3)`\n */\n TinyColor.prototype.triad = function () {\n return this.polyad(3);\n };\n /**\n * Alias for `polyad(4)`\n */\n TinyColor.prototype.tetrad = function () {\n return this.polyad(4);\n };\n /**\n * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)\n * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...\n */\n TinyColor.prototype.polyad = function (n) {\n var hsl = this.toHsl();\n var h = hsl.h;\n var result = [this];\n var increment = 360 / n;\n for (var i = 1; i < n; i++) {\n result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));\n }\n return result;\n };\n /**\n * compare color vs current color\n */\n TinyColor.prototype.equals = function (color) {\n return this.toRgbString() === new TinyColor(color).toRgbString();\n };\n return TinyColor;\n}());\nexport { TinyColor };\n// kept for backwards compatability with v1\nexport function tinycolor(color, opts) {\n if (color === void 0) { color = ''; }\n if (opts === void 0) { opts = {}; }\n return new TinyColor(color, opts);\n}\n","/**\n * Take input from [0, n] and return it as [0, 1]\n * @hidden\n */\nexport function bound01(n, max) {\n if (isOnePointZero(n)) {\n n = '100%';\n }\n var isPercent = isPercentage(n);\n n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));\n // Automatically convert percentage into number\n if (isPercent) {\n n = parseInt(String(n * max), 10) / 100;\n }\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n // Convert into [0, 1] range if it isn't already\n if (max === 360) {\n // If n is a hue given in degrees,\n // wrap around out-of-range values into [0, 360] range\n // then convert into [0, 1].\n n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));\n }\n else {\n // If n not a hue given in degrees\n // Convert into [0, 1] range if it isn't already.\n n = (n % max) / parseFloat(String(max));\n }\n return n;\n}\n/**\n * Force a number between 0 and 1\n * @hidden\n */\nexport function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n/**\n * Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n * \n * @hidden\n */\nexport function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n}\n/**\n * Check to see if string passed in is a percentage\n * @hidden\n */\nexport function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n}\n/**\n * Return a valid alpha value [0,1] with all invalid values being set to 1\n * @hidden\n */\nexport function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n/**\n * Replace a decimal with it's percentage value\n * @hidden\n */\nexport function convertToPercentage(n) {\n if (n <= 1) {\n return \"\".concat(Number(n) * 100, \"%\");\n }\n return n;\n}\n/**\n * Force a hex value to have 2 characters\n * @hidden\n */\nexport function pad2(c) {\n return c.length === 1 ? '0' + c : String(c);\n}\n","import * as React from 'react';\nvar OrderContext = /*#__PURE__*/React.createContext(null);\nexport default OrderContext;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport OrderContext from \"./Context\";\nvar EMPTY_LIST = [];\n/**\n * Will add `div` to document. Nest call will keep order\n * @param render Render DOM in document\n */\n\nexport default function useDom(render, debug) {\n var _React$useState = React.useState(function () {\n if (!canUseDom()) {\n return null;\n }\n\n var defaultEle = document.createElement('div');\n\n if (process.env.NODE_ENV !== 'production' && debug) {\n defaultEle.setAttribute('data-debug', debug);\n }\n\n return defaultEle;\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n ele = _React$useState2[0]; // ========================== Order ==========================\n\n\n var appendedRef = React.useRef(false);\n var queueCreate = React.useContext(OrderContext);\n\n var _React$useState3 = React.useState(EMPTY_LIST),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n queue = _React$useState4[0],\n setQueue = _React$useState4[1];\n\n var mergedQueueCreate = queueCreate || (appendedRef.current ? undefined : function (appendFn) {\n setQueue(function (origin) {\n var newQueue = [appendFn].concat(_toConsumableArray(origin));\n return newQueue;\n });\n }); // =========================== DOM ===========================\n\n function append() {\n if (!ele.parentElement) {\n document.body.appendChild(ele);\n }\n\n appendedRef.current = true;\n }\n\n function cleanup() {\n var _ele$parentElement;\n\n (_ele$parentElement = ele.parentElement) === null || _ele$parentElement === void 0 ? void 0 : _ele$parentElement.removeChild(ele);\n appendedRef.current = false;\n }\n\n useLayoutEffect(function () {\n if (render) {\n if (queueCreate) {\n queueCreate(append);\n } else {\n append();\n }\n } else {\n cleanup();\n }\n\n return cleanup;\n }, [render]);\n useLayoutEffect(function () {\n if (queue.length) {\n queue.forEach(function (appendFn) {\n return appendFn();\n });\n setQueue(EMPTY_LIST);\n }\n }, [queue]);\n return [ele, mergedQueueCreate];\n}","/* eslint-disable no-param-reassign */\n\nvar cached;\nexport default function getScrollBarSize(fresh) {\n if (typeof document === 'undefined') {\n return 0;\n }\n if (fresh || cached === undefined) {\n var inner = document.createElement('div');\n inner.style.width = '100%';\n inner.style.height = '200px';\n var outer = document.createElement('div');\n var outerStyle = outer.style;\n outerStyle.position = 'absolute';\n outerStyle.top = '0';\n outerStyle.left = '0';\n outerStyle.pointerEvents = 'none';\n outerStyle.visibility = 'hidden';\n outerStyle.width = '200px';\n outerStyle.height = '150px';\n outerStyle.overflow = 'hidden';\n outer.appendChild(inner);\n document.body.appendChild(outer);\n var widthContained = inner.offsetWidth;\n outer.style.overflow = 'scroll';\n var widthScroll = inner.offsetWidth;\n if (widthContained === widthScroll) {\n widthScroll = outer.clientWidth;\n }\n document.body.removeChild(outer);\n cached = widthContained - widthScroll;\n }\n return cached;\n}\nfunction ensureSize(str) {\n var match = str.match(/^(.*)px$/);\n var value = Number(match === null || match === void 0 ? void 0 : match[1]);\n return Number.isNaN(value) ? getScrollBarSize() : value;\n}\nexport function getTargetScrollBarSize(target) {\n if (typeof document === 'undefined' || !target || !(target instanceof Element)) {\n return {\n width: 0,\n height: 0\n };\n }\n var _getComputedStyle = getComputedStyle(target, '::-webkit-scrollbar'),\n width = _getComputedStyle.width,\n height = _getComputedStyle.height;\n return {\n width: ensureSize(width),\n height: ensureSize(height)\n };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { updateCSS, removeCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport getScrollBarSize from \"rc-util/es/getScrollBarSize\";\nimport { isBodyOverflowing } from \"./util\";\nvar UNIQUE_ID = \"rc-util-locker-\".concat(Date.now());\nvar uuid = 0;\nexport default function useScrollLocker(lock) {\n var mergedLock = !!lock;\n\n var _React$useState = React.useState(function () {\n uuid += 1;\n return \"\".concat(UNIQUE_ID, \"_\").concat(uuid);\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n id = _React$useState2[0];\n\n useLayoutEffect(function () {\n if (mergedLock) {\n var scrollbarSize = getScrollBarSize();\n var isOverflow = isBodyOverflowing();\n updateCSS(\"\\nhtml body {\\n overflow-y: hidden;\\n \".concat(isOverflow ? \"width: calc(100% - \".concat(scrollbarSize, \"px);\") : '', \"\\n}\"), id);\n } else {\n removeCSS(id);\n }\n\n return function () {\n removeCSS(id);\n };\n }, [mergedLock, id]);\n}","/**\n * Test usage export. Do not use in your production\n */\nexport function isBodyOverflowing() {\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth;\n}","export var inline = false;\nexport function inlineMock(nextInline) {\n if (typeof nextInline === 'boolean') {\n inline = nextInline;\n }\n\n return inline;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { supportRef, useComposeRef } from \"rc-util/es/ref\";\nimport OrderContext from \"./Context\";\nimport useDom from \"./useDom\";\nimport useScrollLocker from \"./useScrollLocker\";\nimport { inlineMock } from \"./mock\";\n\nvar getPortalContainer = function getPortalContainer(getContainer) {\n if (getContainer === false) {\n return false;\n }\n\n if (!canUseDom() || !getContainer) {\n return null;\n }\n\n if (typeof getContainer === 'string') {\n return document.querySelector(getContainer);\n }\n\n if (typeof getContainer === 'function') {\n return getContainer();\n }\n\n return getContainer;\n};\n\nvar Portal = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var open = props.open,\n autoLock = props.autoLock,\n getContainer = props.getContainer,\n debug = props.debug,\n _props$autoDestroy = props.autoDestroy,\n autoDestroy = _props$autoDestroy === void 0 ? true : _props$autoDestroy,\n children = props.children;\n\n var _React$useState = React.useState(open),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n shouldRender = _React$useState2[0],\n setShouldRender = _React$useState2[1];\n\n var mergedRender = shouldRender || open; // ====================== Should Render ======================\n\n React.useEffect(function () {\n if (autoDestroy || open) {\n setShouldRender(open);\n }\n }, [open, autoDestroy]); // ======================== Container ========================\n\n var _React$useState3 = React.useState(function () {\n return getPortalContainer(getContainer);\n }),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n innerContainer = _React$useState4[0],\n setInnerContainer = _React$useState4[1];\n\n React.useEffect(function () {\n var customizeContainer = getPortalContainer(getContainer); // Tell component that we check this in effect which is safe to be `null`\n\n setInnerContainer(customizeContainer !== null && customizeContainer !== void 0 ? customizeContainer : null);\n });\n\n var _useDom = useDom(mergedRender && !innerContainer, debug),\n _useDom2 = _slicedToArray(_useDom, 2),\n defaultContainer = _useDom2[0],\n queueCreate = _useDom2[1];\n\n var mergedContainer = innerContainer !== null && innerContainer !== void 0 ? innerContainer : defaultContainer; // ========================= Locker ==========================\n\n useScrollLocker(autoLock && open && canUseDom() && (mergedContainer === defaultContainer || mergedContainer === document.body)); // =========================== Ref ===========================\n\n var childRef = null;\n\n if (children && supportRef(children) && ref) {\n var _ref = children;\n childRef = _ref.ref;\n }\n\n var mergedRef = useComposeRef(childRef, ref); // ========================= Render ==========================\n // Do not render when nothing need render\n // When innerContainer is `undefined`, it may not ready since user use ref in the same render\n\n if (!mergedRender || !canUseDom() || innerContainer === undefined) {\n return null;\n } // Render inline\n\n\n var renderInline = mergedContainer === false || inlineMock();\n var reffedChildren = children;\n\n if (ref) {\n reffedChildren = /*#__PURE__*/React.cloneElement(children, {\n ref: mergedRef\n });\n }\n\n return /*#__PURE__*/React.createElement(OrderContext.Provider, {\n value: queueCreate\n }, renderInline ? reffedChildren : /*#__PURE__*/createPortal(reffedChildren, mergedContainer));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Portal.displayName = 'Portal';\n}\n\nexport default Portal;","import Portal from \"./Portal\";\nimport { inlineMock } from \"./mock\";\nexport { inlineMock };\nexport default Portal;","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","import * as React from 'react';\nimport { detectFlexGapSupported } from '../styleChecker';\nexport default (() => {\n const [flexible, setFlexible] = React.useState(false);\n React.useEffect(() => {\n setFlexible(detectFlexGapSupported());\n }, []);\n return flexible;\n});","import * as React from 'react';\nexport default function useForceUpdate() {\n const [, forceUpdate] = React.useReducer(x => x + 1, 0);\n return forceUpdate;\n}","// ================== Collapse Motion ==================\nconst getCollapsedHeight = () => ({\n height: 0,\n opacity: 0\n});\nconst getRealHeight = node => {\n const {\n scrollHeight\n } = node;\n return {\n height: scrollHeight,\n opacity: 1\n };\n};\nconst getCurrentHeight = node => ({\n height: node ? node.offsetHeight : 0\n});\nconst skipOpacityTransition = (_, event) => (event === null || event === void 0 ? void 0 : event.deadline) === true || event.propertyName === 'height';\nconst initCollapseMotion = function () {\n let rootCls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'ant';\n return {\n motionName: `${rootCls}-motion-collapse`,\n onAppearStart: getCollapsedHeight,\n onEnterStart: getCollapsedHeight,\n onAppearActive: getRealHeight,\n onEnterActive: getRealHeight,\n onLeaveStart: getCurrentHeight,\n onLeaveActive: getCollapsedHeight,\n onAppearEnd: skipOpacityTransition,\n onEnterEnd: skipOpacityTransition,\n onLeaveEnd: skipOpacityTransition,\n motionDeadline: 500\n };\n};\nconst SelectPlacements = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'];\nconst getTransitionDirection = placement => {\n if (placement !== undefined && (placement === 'topLeft' || placement === 'topRight')) {\n return `slide-down`;\n }\n return `slide-up`;\n};\nconst getTransitionName = (rootPrefixCls, motion, transitionName) => {\n if (transitionName !== undefined) {\n return transitionName;\n }\n return `${rootPrefixCls}-${motion}`;\n};\nexport { getTransitionName, getTransitionDirection };\nexport default initCollapseMotion;","import * as React from 'react';\nexport const {\n isValidElement\n} = React;\nexport function isFragment(child) {\n return child && isValidElement(child) && child.type === React.Fragment;\n}\nexport function replaceElement(element, replacement, props) {\n if (!isValidElement(element)) {\n return replacement;\n }\n return /*#__PURE__*/React.cloneElement(element, typeof props === 'function' ? props(element.props || {}) : props);\n}\nexport function cloneElement(element, props) {\n return replaceElement(element, element, props);\n}","import React from 'react';\nimport { useToken } from '../theme/internal';\nexport const responsiveArray = ['xxl', 'xl', 'lg', 'md', 'sm', 'xs'];\nconst getResponsiveMap = token => ({\n xs: `(max-width: ${token.screenXSMax}px)`,\n sm: `(min-width: ${token.screenSM}px)`,\n md: `(min-width: ${token.screenMD}px)`,\n lg: `(min-width: ${token.screenLG}px)`,\n xl: `(min-width: ${token.screenXL}px)`,\n xxl: `(min-width: ${token.screenXXL}px)`\n});\n/**\n * Ensures that the breakpoints token are valid, in good order\n * For each breakpoint : screenMin <= screen <= screenMax and screenMax <= nextScreenMin\n */\nconst validateBreakpoints = token => {\n const indexableToken = token;\n const revBreakpoints = [].concat(responsiveArray).reverse();\n revBreakpoints.forEach((breakpoint, i) => {\n const breakpointUpper = breakpoint.toUpperCase();\n const screenMin = `screen${breakpointUpper}Min`;\n const screen = `screen${breakpointUpper}`;\n if (!(indexableToken[screenMin] <= indexableToken[screen])) {\n throw new Error(`${screenMin}<=${screen} fails : !(${indexableToken[screenMin]}<=${indexableToken[screen]})`);\n }\n if (i < revBreakpoints.length - 1) {\n const screenMax = `screen${breakpointUpper}Max`;\n if (!(indexableToken[screen] <= indexableToken[screenMax])) {\n throw new Error(`${screen}<=${screenMax} fails : !(${indexableToken[screen]}<=${indexableToken[screenMax]})`);\n }\n const nextBreakpointUpperMin = revBreakpoints[i + 1].toUpperCase();\n const nextScreenMin = `screen${nextBreakpointUpperMin}Min`;\n if (!(indexableToken[screenMax] <= indexableToken[nextScreenMin])) {\n throw new Error(`${screenMax}<=${nextScreenMin} fails : !(${indexableToken[screenMax]}<=${indexableToken[nextScreenMin]})`);\n }\n }\n });\n return token;\n};\nexport default function useResponsiveObserver() {\n const [, token] = useToken();\n const responsiveMap = getResponsiveMap(validateBreakpoints(token));\n // To avoid repeat create instance, we add `useMemo` here.\n return React.useMemo(() => {\n const subscribers = new Map();\n let subUid = -1;\n let screens = {};\n return {\n matchHandlers: {},\n dispatch(pointMap) {\n screens = pointMap;\n subscribers.forEach(func => func(screens));\n return subscribers.size >= 1;\n },\n subscribe(func) {\n if (!subscribers.size) this.register();\n subUid += 1;\n subscribers.set(subUid, func);\n func(screens);\n return subUid;\n },\n unsubscribe(paramToken) {\n subscribers.delete(paramToken);\n if (!subscribers.size) this.unregister();\n },\n unregister() {\n Object.keys(responsiveMap).forEach(screen => {\n const matchMediaQuery = responsiveMap[screen];\n const handler = this.matchHandlers[matchMediaQuery];\n handler === null || handler === void 0 ? void 0 : handler.mql.removeListener(handler === null || handler === void 0 ? void 0 : handler.listener);\n });\n subscribers.clear();\n },\n register() {\n Object.keys(responsiveMap).forEach(screen => {\n const matchMediaQuery = responsiveMap[screen];\n const listener = _ref => {\n let {\n matches\n } = _ref;\n this.dispatch(Object.assign(Object.assign({}, screens), {\n [screen]: matches\n }));\n };\n const mql = window.matchMedia(matchMediaQuery);\n mql.addListener(listener);\n this.matchHandlers[matchMediaQuery] = {\n mql,\n listener\n };\n listener(mql);\n });\n },\n responsiveMap\n };\n }, [token]);\n}","import classNames from 'classnames';\nconst InputStatuses = ['warning', 'error', ''];\nexport function getStatusClassNames(prefixCls, status, hasFeedback) {\n return classNames({\n [`${prefixCls}-status-success`]: status === 'success',\n [`${prefixCls}-status-warning`]: status === 'warning',\n [`${prefixCls}-status-error`]: status === 'error',\n [`${prefixCls}-status-validating`]: status === 'validating',\n [`${prefixCls}-has-feedback`]: hasFeedback\n });\n}\nexport const getMergedStatus = (contextStatus, customStatus) => customStatus || contextStatus;","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { isStyleSupport } from \"rc-util/es/Dom/styleChecker\";\nexport const canUseDocElement = () => canUseDom() && window.document.documentElement;\nexport { isStyleSupport };\nlet flexGapSupported;\nexport const detectFlexGapSupported = () => {\n if (!canUseDocElement()) {\n return false;\n }\n if (flexGapSupported !== undefined) {\n return flexGapSupported;\n }\n // create flex container with row-gap set\n const flex = document.createElement('div');\n flex.style.display = 'flex';\n flex.style.flexDirection = 'column';\n flex.style.rowGap = '1px';\n // create two, elements inside it\n flex.appendChild(document.createElement('div'));\n flex.appendChild(document.createElement('div'));\n // append to the DOM (needed to obtain scrollHeight)\n document.body.appendChild(flex);\n flexGapSupported = flex.scrollHeight === 1; // flex container should be 1px high from the row-gap\n document.body.removeChild(flex);\n return flexGapSupported;\n};","import { genComponentStyleHook } from '../../theme/internal';\nconst genWaveStyle = token => {\n const {\n componentCls,\n colorPrimary\n } = token;\n return {\n [componentCls]: {\n position: 'absolute',\n background: 'transparent',\n pointerEvents: 'none',\n boxSizing: 'border-box',\n color: `var(--wave-color, ${colorPrimary})`,\n boxShadow: `0 0 0 0 currentcolor`,\n opacity: 0.2,\n // =================== Motion ===================\n '&.wave-motion-appear': {\n transition: [`box-shadow 0.4s ${token.motionEaseOutCirc}`, `opacity 2s ${token.motionEaseOutCirc}`].join(','),\n '&-active': {\n boxShadow: `0 0 0 6px currentcolor`,\n opacity: 0\n }\n }\n }\n };\n};\nexport default genComponentStyleHook('Wave', token => [genWaveStyle(token)]);","export function isNotGrey(color) {\n // eslint-disable-next-line no-useless-escape\n const match = (color || '').match(/rgba?\\((\\d*), (\\d*), (\\d*)(, [\\d.]*)?\\)/);\n if (match && match[1] && match[2] && match[3]) {\n return !(match[1] === match[2] && match[2] === match[3]);\n }\n return true;\n}\nexport function isValidWaveColor(color) {\n return color && color !== '#fff' && color !== '#ffffff' && color !== 'rgb(255, 255, 255)' && color !== 'rgba(255, 255, 255, 1)' && isNotGrey(color) && !/rgba\\((?:\\d*, ){3}0\\)/.test(color) &&\n // any transparent rgba color\n color !== 'transparent';\n}\nexport function getTargetWaveColor(node) {\n const {\n borderTopColor,\n borderColor,\n backgroundColor\n } = getComputedStyle(node);\n if (isValidWaveColor(borderTopColor)) {\n return borderTopColor;\n }\n if (isValidWaveColor(borderColor)) {\n return borderColor;\n }\n if (isValidWaveColor(backgroundColor)) {\n return backgroundColor;\n }\n return null;\n}","import * as React from 'react';\nimport CSSMotion from 'rc-motion';\nimport raf from \"rc-util/es/raf\";\nimport { render, unmount } from \"rc-util/es/React/render\";\nimport classNames from 'classnames';\nimport { getTargetWaveColor } from './util';\nfunction validateNum(value) {\n return Number.isNaN(value) ? 0 : value;\n}\nconst WaveEffect = props => {\n const {\n className,\n target\n } = props;\n const divRef = React.useRef(null);\n const [color, setWaveColor] = React.useState(null);\n const [borderRadius, setBorderRadius] = React.useState([]);\n const [left, setLeft] = React.useState(0);\n const [top, setTop] = React.useState(0);\n const [width, setWidth] = React.useState(0);\n const [height, setHeight] = React.useState(0);\n const [enabled, setEnabled] = React.useState(false);\n const waveStyle = {\n left,\n top,\n width,\n height,\n borderRadius: borderRadius.map(radius => `${radius}px`).join(' ')\n };\n if (color) {\n waveStyle['--wave-color'] = color;\n }\n function syncPos() {\n const nodeStyle = getComputedStyle(target);\n // Get wave color from target\n setWaveColor(getTargetWaveColor(target));\n const isStatic = nodeStyle.position === 'static';\n // Rect\n const {\n borderLeftWidth,\n borderTopWidth\n } = nodeStyle;\n setLeft(isStatic ? target.offsetLeft : validateNum(-parseFloat(borderLeftWidth)));\n setTop(isStatic ? target.offsetTop : validateNum(-parseFloat(borderTopWidth)));\n setWidth(target.offsetWidth);\n setHeight(target.offsetHeight);\n // Get border radius\n const {\n borderTopLeftRadius,\n borderTopRightRadius,\n borderBottomLeftRadius,\n borderBottomRightRadius\n } = nodeStyle;\n setBorderRadius([borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, borderBottomLeftRadius].map(radius => validateNum(parseFloat(radius))));\n }\n React.useEffect(() => {\n if (target) {\n // We need delay to check position here\n // since UI may change after click\n const id = raf(() => {\n syncPos();\n setEnabled(true);\n });\n // Add resize observer to follow size\n let resizeObserver;\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(syncPos);\n resizeObserver.observe(target);\n }\n return () => {\n raf.cancel(id);\n resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();\n };\n }\n }, []);\n if (!enabled) {\n return null;\n }\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: true,\n motionAppear: true,\n motionName: \"wave-motion\",\n motionDeadline: 5000,\n onAppearEnd: (_, event) => {\n var _a;\n if (event.deadline || event.propertyName === 'opacity') {\n const holder = (_a = divRef.current) === null || _a === void 0 ? void 0 : _a.parentElement;\n unmount(holder).then(() => {\n var _a;\n (_a = holder.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(holder);\n });\n }\n return false;\n }\n }, _ref => {\n let {\n className: motionClassName\n } = _ref;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: divRef,\n className: classNames(className, motionClassName),\n style: waveStyle\n });\n });\n};\nexport default function showWaveEffect(node, className) {\n // Create holder\n const holder = document.createElement('div');\n holder.style.position = 'absolute';\n holder.style.left = `0px`;\n holder.style.top = `0px`;\n node === null || node === void 0 ? void 0 : node.insertBefore(holder, node === null || node === void 0 ? void 0 : node.firstChild);\n render( /*#__PURE__*/React.createElement(WaveEffect, {\n target: node,\n className: className\n }), holder);\n}","import showWaveEffect from './WaveEffect';\nexport default function useWave(nodeRef, className) {\n function showWave() {\n const node = nodeRef.current;\n showWaveEffect(node, className);\n }\n return showWave;\n}","import classNames from 'classnames';\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport isVisible from \"rc-util/es/Dom/isVisible\";\nimport React, { useContext, useRef } from 'react';\nimport { ConfigContext } from '../../config-provider';\nimport { cloneElement } from '../reactNode';\nimport useStyle from './style';\nimport useWave from './useWave';\nconst Wave = props => {\n const {\n children,\n disabled\n } = props;\n const {\n getPrefixCls\n } = useContext(ConfigContext);\n const containerRef = useRef(null);\n // ============================== Style ===============================\n const prefixCls = getPrefixCls('wave');\n const [, hashId] = useStyle(prefixCls);\n // =============================== Wave ===============================\n const showWave = useWave(containerRef, classNames(prefixCls, hashId));\n // ============================== Effect ==============================\n React.useEffect(() => {\n const node = containerRef.current;\n if (!node || node.nodeType !== 1 || disabled) {\n return;\n }\n // Click handler\n const onClick = e => {\n // Fix radio button click twice\n if (e.target.tagName === 'INPUT' || !isVisible(e.target) ||\n // No need wave\n !node.getAttribute || node.getAttribute('disabled') || node.disabled || node.className.includes('disabled') || node.className.includes('-leave')) {\n return;\n }\n showWave();\n };\n // Bind events\n node.addEventListener('click', onClick, true);\n return () => {\n node.removeEventListener('click', onClick, true);\n };\n }, [disabled]);\n // ============================== Render ==============================\n if (! /*#__PURE__*/React.isValidElement(children)) {\n return children !== null && children !== void 0 ? children : null;\n }\n const ref = supportRef(children) ? composeRef(children.ref, containerRef) : containerRef;\n return cloneElement(children, {\n ref\n });\n};\nif (process.env.NODE_ENV !== 'production') {\n Wave.displayName = 'Wave';\n}\nexport default Wave;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport { useToken } from '../theme/internal';\nimport warning from '../_util/warning';\nexport const GroupSizeContext = /*#__PURE__*/React.createContext(undefined);\nconst ButtonGroup = props => {\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const {\n prefixCls: customizePrefixCls,\n size,\n className\n } = props,\n others = __rest(props, [\"prefixCls\", \"size\", \"className\"]);\n const prefixCls = getPrefixCls('btn-group', customizePrefixCls);\n const [,, hashId] = useToken();\n let sizeCls = '';\n switch (size) {\n case 'large':\n sizeCls = 'lg';\n break;\n case 'small':\n sizeCls = 'sm';\n break;\n case 'middle':\n case undefined:\n break;\n default:\n process.env.NODE_ENV !== \"production\" ? warning(!size, 'Button.Group', 'Invalid prop `size`.') : void 0;\n }\n const classes = classNames(prefixCls, {\n [`${prefixCls}-${sizeCls}`]: sizeCls,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, hashId);\n return /*#__PURE__*/React.createElement(GroupSizeContext.Provider, {\n value: size\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n className: classes\n })));\n};\nexport default ButtonGroup;","import React from 'react';\nimport { cloneElement, isFragment } from '../_util/reactNode';\nconst rxTwoCNChar = /^[\\u4e00-\\u9fa5]{2}$/;\nexport const isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar);\nexport function isString(str) {\n return typeof str === 'string';\n}\nexport function isUnBorderedButtonType(type) {\n return type === 'text' || type === 'link';\n}\nfunction splitCNCharsBySpace(child, needInserted) {\n if (child === null || child === undefined) {\n return;\n }\n const SPACE = needInserted ? ' ' : '';\n if (typeof child !== 'string' && typeof child !== 'number' && isString(child.type) && isTwoCNChar(child.props.children)) {\n return cloneElement(child, {\n children: child.props.children.split('').join(SPACE)\n });\n }\n if (typeof child === 'string') {\n return isTwoCNChar(child) ? /*#__PURE__*/React.createElement(\"span\", null, child.split('').join(SPACE)) : /*#__PURE__*/React.createElement(\"span\", null, child);\n }\n if (isFragment(child)) {\n return /*#__PURE__*/React.createElement(\"span\", null, child);\n }\n return child;\n}\nexport function spaceChildren(children, needInserted) {\n let isPrevChildPure = false;\n const childList = [];\n React.Children.forEach(children, child => {\n const type = typeof child;\n const isCurrentChildPure = type === 'string' || type === 'number';\n if (isPrevChildPure && isCurrentChildPure) {\n const lastIndex = childList.length - 1;\n const lastChild = childList[lastIndex];\n childList[lastIndex] = `${lastChild}${child}`;\n } else {\n childList.push(child);\n }\n isPrevChildPure = isCurrentChildPure;\n });\n return React.Children.map(childList, child => splitCNCharsBySpace(child, needInserted));\n}\nconst ButtonTypes = ['default', 'primary', 'ghost', 'dashed', 'link', 'text'];\nconst ButtonShapes = ['default', 'circle', 'round'];\nconst ButtonHTMLTypes = ['submit', 'button', 'reset'];","import LoadingOutlined from \"@ant-design/icons/es/icons/LoadingOutlined\";\nimport CSSMotion from 'rc-motion';\nimport React from 'react';\nconst getCollapsedWidth = () => ({\n width: 0,\n opacity: 0,\n transform: 'scale(0)'\n});\nconst getRealWidth = node => ({\n width: node.scrollWidth,\n opacity: 1,\n transform: 'scale(1)'\n});\nconst LoadingIcon = _ref => {\n let {\n prefixCls,\n loading,\n existIcon\n } = _ref;\n const visible = !!loading;\n if (existIcon) {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-loading-icon`\n }, /*#__PURE__*/React.createElement(LoadingOutlined, null));\n }\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n // We do not really use this motionName\n motionName: `${prefixCls}-loading-icon-motion`,\n removeOnLeave: true,\n onAppearStart: getCollapsedWidth,\n onAppearActive: getRealWidth,\n onEnterStart: getCollapsedWidth,\n onEnterActive: getRealWidth,\n onLeaveStart: getRealWidth,\n onLeaveActive: getCollapsedWidth\n }, (_ref2, ref) => {\n let {\n className,\n style\n } = _ref2;\n return /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-loading-icon`,\n style: style,\n ref: ref\n }, /*#__PURE__*/React.createElement(LoadingOutlined, {\n className: className\n }));\n });\n};\nexport default LoadingIcon;","const genButtonBorderStyle = (buttonTypeCls, borderColor) => ({\n // Border\n [`> span, > ${buttonTypeCls}`]: {\n '&:not(:last-child)': {\n [`&, & > ${buttonTypeCls}`]: {\n '&:not(:disabled)': {\n borderInlineEndColor: borderColor\n }\n }\n },\n '&:not(:first-child)': {\n [`&, & > ${buttonTypeCls}`]: {\n '&:not(:disabled)': {\n borderInlineStartColor: borderColor\n }\n }\n }\n }\n});\nconst genGroupStyle = token => {\n const {\n componentCls,\n fontSize,\n lineWidth,\n colorPrimaryHover,\n colorErrorHover\n } = token;\n return {\n [`${componentCls}-group`]: [{\n position: 'relative',\n display: 'inline-flex',\n // Border\n [`> span, > ${componentCls}`]: {\n '&:not(:last-child)': {\n [`&, & > ${componentCls}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0\n }\n },\n '&:not(:first-child)': {\n marginInlineStart: -lineWidth,\n [`&, & > ${componentCls}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n }\n }\n },\n [componentCls]: {\n position: 'relative',\n zIndex: 1,\n [`&:hover,\n &:focus,\n &:active`]: {\n zIndex: 2\n },\n '&[disabled]': {\n zIndex: 0\n }\n },\n [`${componentCls}-icon-only`]: {\n fontSize\n }\n },\n // Border Color\n genButtonBorderStyle(`${componentCls}-primary`, colorPrimaryHover), genButtonBorderStyle(`${componentCls}-danger`, colorErrorHover)]\n };\n};\nexport default genGroupStyle;","function compactItemVerticalBorder(token, parentCls) {\n return {\n // border collapse\n [`&-item:not(${parentCls}-last-item)`]: {\n marginBottom: -token.lineWidth\n },\n '&-item': {\n '&:hover,&:focus,&:active': {\n zIndex: 2\n },\n '&[disabled]': {\n zIndex: 0\n }\n }\n };\n}\nfunction compactItemBorderVerticalRadius(prefixCls, parentCls) {\n return {\n [`&-item:not(${parentCls}-first-item):not(${parentCls}-last-item)`]: {\n borderRadius: 0\n },\n [`&-item${parentCls}-first-item:not(${parentCls}-last-item)`]: {\n [`&, &${prefixCls}-sm, &${prefixCls}-lg`]: {\n borderEndEndRadius: 0,\n borderEndStartRadius: 0\n }\n },\n [`&-item${parentCls}-last-item:not(${parentCls}-first-item)`]: {\n [`&, &${prefixCls}-sm, &${prefixCls}-lg`]: {\n borderStartStartRadius: 0,\n borderStartEndRadius: 0\n }\n }\n };\n}\nexport function genCompactItemVerticalStyle(token) {\n const compactCls = `${token.componentCls}-compact-vertical`;\n return {\n [compactCls]: Object.assign(Object.assign({}, compactItemVerticalBorder(token, compactCls)), compactItemBorderVerticalRadius(token.componentCls, compactCls))\n };\n}","import { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport genGroupStyle from './group';\nimport { genFocusStyle } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nimport { genCompactItemVerticalStyle } from '../../style/compact-item-vertical';\n// ============================== Shared ==============================\nconst genSharedButtonStyle = token => {\n const {\n componentCls,\n iconCls\n } = token;\n return {\n [componentCls]: {\n outline: 'none',\n position: 'relative',\n display: 'inline-block',\n fontWeight: 400,\n whiteSpace: 'nowrap',\n textAlign: 'center',\n backgroundImage: 'none',\n backgroundColor: 'transparent',\n border: `${token.lineWidth}px ${token.lineType} transparent`,\n cursor: 'pointer',\n transition: `all ${token.motionDurationMid} ${token.motionEaseInOut}`,\n userSelect: 'none',\n touchAction: 'manipulation',\n lineHeight: token.lineHeight,\n color: token.colorText,\n '> span': {\n display: 'inline-block'\n },\n // Leave a space between icon and text.\n [`> ${iconCls} + span, > span + ${iconCls}`]: {\n marginInlineStart: token.marginXS\n },\n '> a': {\n color: 'currentColor'\n },\n '&:not(:disabled)': Object.assign({}, genFocusStyle(token)),\n // make `btn-icon-only` not too narrow\n [`&-icon-only${componentCls}-compact-item`]: {\n flex: 'none'\n },\n // Special styles for Primary Button\n [`&-compact-item${componentCls}-primary`]: {\n [`&:not([disabled]) + ${componentCls}-compact-item${componentCls}-primary:not([disabled])`]: {\n position: 'relative',\n '&:before': {\n position: 'absolute',\n top: -token.lineWidth,\n insetInlineStart: -token.lineWidth,\n display: 'inline-block',\n width: token.lineWidth,\n height: `calc(100% + ${token.lineWidth * 2}px)`,\n backgroundColor: token.colorPrimaryHover,\n content: '\"\"'\n }\n }\n },\n // Special styles for Primary Button\n '&-compact-vertical-item': {\n [`&${componentCls}-primary`]: {\n [`&:not([disabled]) + ${componentCls}-compact-vertical-item${componentCls}-primary:not([disabled])`]: {\n position: 'relative',\n '&:before': {\n position: 'absolute',\n top: -token.lineWidth,\n insetInlineStart: -token.lineWidth,\n display: 'inline-block',\n width: `calc(100% + ${token.lineWidth * 2}px)`,\n height: token.lineWidth,\n backgroundColor: token.colorPrimaryHover,\n content: '\"\"'\n }\n }\n }\n }\n }\n };\n};\nconst genHoverActiveButtonStyle = (hoverStyle, activeStyle) => ({\n '&:not(:disabled)': {\n '&:hover': hoverStyle,\n '&:active': activeStyle\n }\n});\n// ============================== Shape ===============================\nconst genCircleButtonStyle = token => ({\n minWidth: token.controlHeight,\n paddingInlineStart: 0,\n paddingInlineEnd: 0,\n borderRadius: '50%'\n});\nconst genRoundButtonStyle = token => ({\n borderRadius: token.controlHeight,\n paddingInlineStart: token.controlHeight / 2,\n paddingInlineEnd: token.controlHeight / 2\n});\n// =============================== Type ===============================\nconst genDisabledStyle = token => ({\n cursor: 'not-allowed',\n borderColor: token.colorBorder,\n color: token.colorTextDisabled,\n backgroundColor: token.colorBgContainerDisabled,\n boxShadow: 'none'\n});\nconst genGhostButtonStyle = (btnCls, textColor, borderColor, textColorDisabled, borderColorDisabled, hoverStyle, activeStyle) => ({\n [`&${btnCls}-background-ghost`]: Object.assign(Object.assign({\n color: textColor || undefined,\n backgroundColor: 'transparent',\n borderColor: borderColor || undefined,\n boxShadow: 'none'\n }, genHoverActiveButtonStyle(Object.assign({\n backgroundColor: 'transparent'\n }, hoverStyle), Object.assign({\n backgroundColor: 'transparent'\n }, activeStyle))), {\n '&:disabled': {\n cursor: 'not-allowed',\n color: textColorDisabled || undefined,\n borderColor: borderColorDisabled || undefined\n }\n })\n});\nconst genSolidDisabledButtonStyle = token => ({\n '&:disabled': Object.assign({}, genDisabledStyle(token))\n});\nconst genSolidButtonStyle = token => Object.assign({}, genSolidDisabledButtonStyle(token));\nconst genPureDisabledButtonStyle = token => ({\n '&:disabled': {\n cursor: 'not-allowed',\n color: token.colorTextDisabled\n }\n});\n// Type: Default\nconst genDefaultButtonStyle = token => Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genSolidButtonStyle(token)), {\n backgroundColor: token.colorBgContainer,\n borderColor: token.colorBorder,\n boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlTmpOutline}`\n}), genHoverActiveButtonStyle({\n color: token.colorPrimaryHover,\n borderColor: token.colorPrimaryHover\n}, {\n color: token.colorPrimaryActive,\n borderColor: token.colorPrimaryActive\n})), genGhostButtonStyle(token.componentCls, token.colorBgContainer, token.colorBgContainer, token.colorTextDisabled, token.colorBorder)), {\n [`&${token.componentCls}-dangerous`]: Object.assign(Object.assign(Object.assign({\n color: token.colorError,\n borderColor: token.colorError\n }, genHoverActiveButtonStyle({\n color: token.colorErrorHover,\n borderColor: token.colorErrorBorderHover\n }, {\n color: token.colorErrorActive,\n borderColor: token.colorErrorActive\n })), genGhostButtonStyle(token.componentCls, token.colorError, token.colorError, token.colorTextDisabled, token.colorBorder)), genSolidDisabledButtonStyle(token))\n});\n// Type: Primary\nconst genPrimaryButtonStyle = token => Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genSolidButtonStyle(token)), {\n color: token.colorTextLightSolid,\n backgroundColor: token.colorPrimary,\n boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.controlOutline}`\n}), genHoverActiveButtonStyle({\n color: token.colorTextLightSolid,\n backgroundColor: token.colorPrimaryHover\n}, {\n color: token.colorTextLightSolid,\n backgroundColor: token.colorPrimaryActive\n})), genGhostButtonStyle(token.componentCls, token.colorPrimary, token.colorPrimary, token.colorTextDisabled, token.colorBorder, {\n color: token.colorPrimaryHover,\n borderColor: token.colorPrimaryHover\n}, {\n color: token.colorPrimaryActive,\n borderColor: token.colorPrimaryActive\n})), {\n [`&${token.componentCls}-dangerous`]: Object.assign(Object.assign(Object.assign({\n backgroundColor: token.colorError,\n boxShadow: `0 ${token.controlOutlineWidth}px 0 ${token.colorErrorOutline}`\n }, genHoverActiveButtonStyle({\n backgroundColor: token.colorErrorHover\n }, {\n backgroundColor: token.colorErrorActive\n })), genGhostButtonStyle(token.componentCls, token.colorError, token.colorError, token.colorTextDisabled, token.colorBorder, {\n color: token.colorErrorHover,\n borderColor: token.colorErrorHover\n }, {\n color: token.colorErrorActive,\n borderColor: token.colorErrorActive\n })), genSolidDisabledButtonStyle(token))\n});\n// Type: Dashed\nconst genDashedButtonStyle = token => Object.assign(Object.assign({}, genDefaultButtonStyle(token)), {\n borderStyle: 'dashed'\n});\n// Type: Link\nconst genLinkButtonStyle = token => Object.assign(Object.assign(Object.assign({\n color: token.colorLink\n}, genHoverActiveButtonStyle({\n color: token.colorLinkHover\n}, {\n color: token.colorLinkActive\n})), genPureDisabledButtonStyle(token)), {\n [`&${token.componentCls}-dangerous`]: Object.assign(Object.assign({\n color: token.colorError\n }, genHoverActiveButtonStyle({\n color: token.colorErrorHover\n }, {\n color: token.colorErrorActive\n })), genPureDisabledButtonStyle(token))\n});\n// Type: Text\nconst genTextButtonStyle = token => Object.assign(Object.assign(Object.assign({}, genHoverActiveButtonStyle({\n color: token.colorText,\n backgroundColor: token.colorBgTextHover\n}, {\n color: token.colorText,\n backgroundColor: token.colorBgTextActive\n})), genPureDisabledButtonStyle(token)), {\n [`&${token.componentCls}-dangerous`]: Object.assign(Object.assign({\n color: token.colorError\n }, genPureDisabledButtonStyle(token)), genHoverActiveButtonStyle({\n color: token.colorErrorHover,\n backgroundColor: token.colorErrorBg\n }, {\n color: token.colorErrorHover,\n backgroundColor: token.colorErrorBg\n }))\n});\n// Href and Disabled\nconst genDisabledButtonStyle = token => Object.assign(Object.assign({}, genDisabledStyle(token)), {\n [`&${token.componentCls}:hover`]: Object.assign({}, genDisabledStyle(token))\n});\nconst genTypeButtonStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [`${componentCls}-default`]: genDefaultButtonStyle(token),\n [`${componentCls}-primary`]: genPrimaryButtonStyle(token),\n [`${componentCls}-dashed`]: genDashedButtonStyle(token),\n [`${componentCls}-link`]: genLinkButtonStyle(token),\n [`${componentCls}-text`]: genTextButtonStyle(token),\n [`${componentCls}-disabled`]: genDisabledButtonStyle(token)\n };\n};\n// =============================== Size ===============================\nconst genSizeButtonStyle = function (token) {\n let sizePrefixCls = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const {\n componentCls,\n iconCls,\n controlHeight,\n fontSize,\n lineHeight,\n lineWidth,\n borderRadius,\n buttonPaddingHorizontal\n } = token;\n const paddingVertical = Math.max(0, (controlHeight - fontSize * lineHeight) / 2 - lineWidth);\n const paddingHorizontal = buttonPaddingHorizontal - lineWidth;\n const iconOnlyCls = `${componentCls}-icon-only`;\n return [\n // Size\n {\n [`${componentCls}${sizePrefixCls}`]: {\n fontSize,\n height: controlHeight,\n padding: `${paddingVertical}px ${paddingHorizontal}px`,\n borderRadius,\n [`&${iconOnlyCls}`]: {\n width: controlHeight,\n paddingInlineStart: 0,\n paddingInlineEnd: 0,\n [`&${componentCls}-round`]: {\n width: 'auto'\n },\n '> span': {\n transform: 'scale(1.143)' // 14px -> 16px\n }\n },\n\n // Loading\n [`&${componentCls}-loading`]: {\n opacity: token.opacityLoading,\n cursor: 'default'\n },\n [`${componentCls}-loading-icon`]: {\n transition: `width ${token.motionDurationSlow} ${token.motionEaseInOut}, opacity ${token.motionDurationSlow} ${token.motionEaseInOut}`\n },\n [`&:not(${iconOnlyCls}) ${componentCls}-loading-icon > ${iconCls}`]: {\n marginInlineEnd: token.marginXS\n }\n }\n },\n // Shape - patch prefixCls again to override solid border radius style\n {\n [`${componentCls}${componentCls}-circle${sizePrefixCls}`]: genCircleButtonStyle(token)\n }, {\n [`${componentCls}${componentCls}-round${sizePrefixCls}`]: genRoundButtonStyle(token)\n }];\n};\nconst genSizeBaseButtonStyle = token => genSizeButtonStyle(token);\nconst genSizeSmallButtonStyle = token => {\n const smallToken = mergeToken(token, {\n controlHeight: token.controlHeightSM,\n padding: token.paddingXS,\n buttonPaddingHorizontal: 8,\n borderRadius: token.borderRadiusSM\n });\n return genSizeButtonStyle(smallToken, `${token.componentCls}-sm`);\n};\nconst genSizeLargeButtonStyle = token => {\n const largeToken = mergeToken(token, {\n controlHeight: token.controlHeightLG,\n fontSize: token.fontSizeLG,\n borderRadius: token.borderRadiusLG\n });\n return genSizeButtonStyle(largeToken, `${token.componentCls}-lg`);\n};\nconst genBlockButtonStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [componentCls]: {\n [`&${componentCls}-block`]: {\n width: '100%'\n }\n }\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Button', token => {\n const {\n controlTmpOutline,\n paddingContentHorizontal\n } = token;\n const buttonToken = mergeToken(token, {\n colorOutlineDefault: controlTmpOutline,\n buttonPaddingHorizontal: paddingContentHorizontal\n });\n return [\n // Shared\n genSharedButtonStyle(buttonToken),\n // Size\n genSizeSmallButtonStyle(buttonToken), genSizeBaseButtonStyle(buttonToken), genSizeLargeButtonStyle(buttonToken),\n // Block\n genBlockButtonStyle(buttonToken),\n // Group (type, ghost, danger, disabled, loading)\n genTypeButtonStyle(buttonToken),\n // Button Group\n genGroupStyle(buttonToken),\n // Space Compact\n genCompactItemStyle(token, {\n focus: false\n }), genCompactItemVerticalStyle(token)];\n});","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/* eslint-disable react/button-has-type */\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport * as React from 'react';\nimport warning from '../_util/warning';\nimport Wave from '../_util/wave';\nimport { ConfigContext } from '../config-provider';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport SizeContext from '../config-provider/SizeContext';\nimport { useCompactItemContext } from '../space/Compact';\nimport Group, { GroupSizeContext } from './button-group';\nimport { isTwoCNChar, isUnBorderedButtonType, spaceChildren } from './buttonHelpers';\nimport LoadingIcon from './LoadingIcon';\nimport useStyle from './style';\nexport function convertLegacyProps(type) {\n if (type === 'danger') {\n return {\n danger: true\n };\n }\n return {\n type\n };\n}\nconst InternalButton = (props, ref) => {\n const {\n loading = false,\n prefixCls: customizePrefixCls,\n type = 'default',\n danger,\n shape = 'default',\n size: customizeSize,\n disabled: customDisabled,\n className,\n rootClassName,\n children,\n icon,\n ghost = false,\n block = false,\n // React does not recognize the `htmlType` prop on a DOM element. Here we pick it out of `rest`.\n htmlType = 'button'\n } = props,\n rest = __rest(props, [\"loading\", \"prefixCls\", \"type\", \"danger\", \"shape\", \"size\", \"disabled\", \"className\", \"rootClassName\", \"children\", \"icon\", \"ghost\", \"block\", \"htmlType\"]);\n const {\n getPrefixCls,\n autoInsertSpaceInButton,\n direction\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('btn', customizePrefixCls);\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const size = React.useContext(SizeContext);\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n const groupSize = React.useContext(GroupSizeContext);\n const [innerLoading, setLoading] = React.useState(!!loading);\n const [hasTwoCNChar, setHasTwoCNChar] = React.useState(false);\n const buttonRef = ref || /*#__PURE__*/React.createRef();\n const isNeedInserted = () => React.Children.count(children) === 1 && !icon && !isUnBorderedButtonType(type);\n const fixTwoCNChar = () => {\n // FIXME: for HOC usage like \n if (!buttonRef || !buttonRef.current || autoInsertSpaceInButton === false) {\n return;\n }\n const buttonText = buttonRef.current.textContent;\n if (isNeedInserted() && isTwoCNChar(buttonText)) {\n if (!hasTwoCNChar) {\n setHasTwoCNChar(true);\n }\n } else if (hasTwoCNChar) {\n setHasTwoCNChar(false);\n }\n };\n const loadingOrDelay = typeof loading === 'boolean' ? loading : (loading === null || loading === void 0 ? void 0 : loading.delay) || true;\n React.useEffect(() => {\n let delayTimer = null;\n if (typeof loadingOrDelay === 'number') {\n delayTimer = window.setTimeout(() => {\n delayTimer = null;\n setLoading(loadingOrDelay);\n }, loadingOrDelay);\n } else {\n setLoading(loadingOrDelay);\n }\n function cleanupTimer() {\n if (delayTimer) {\n window.clearTimeout(delayTimer);\n delayTimer = null;\n }\n }\n return cleanupTimer;\n }, [loadingOrDelay]);\n React.useEffect(fixTwoCNChar, [buttonRef]);\n const handleClick = e => {\n const {\n onClick\n } = props;\n // FIXME: https://github.com/ant-design/ant-design/issues/30207\n if (innerLoading || mergedDisabled) {\n e.preventDefault();\n return;\n }\n onClick === null || onClick === void 0 ? void 0 : onClick(e);\n };\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof icon === 'string' && icon.length > 2), 'Button', `\\`icon\\` is using ReactNode instead of string naming in v4. Please check \\`${icon}\\` at https://ant.design/components/icon`) : void 0;\n process.env.NODE_ENV !== \"production\" ? warning(!(ghost && isUnBorderedButtonType(type)), 'Button', \"`link` or `text` button can't be a `ghost` button.\") : void 0;\n const autoInsertSpace = autoInsertSpaceInButton !== false;\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n const sizeClassNameMap = {\n large: 'lg',\n small: 'sm',\n middle: undefined\n };\n const sizeFullname = compactSize || groupSize || customizeSize || size;\n const sizeCls = sizeFullname ? sizeClassNameMap[sizeFullname] || '' : '';\n const iconType = innerLoading ? 'loading' : icon;\n const linkButtonRestProps = omit(rest, ['navigate']);\n const hrefAndDisabled = linkButtonRestProps.href !== undefined && mergedDisabled;\n const classes = classNames(prefixCls, hashId, {\n [`${prefixCls}-${shape}`]: shape !== 'default' && shape,\n [`${prefixCls}-${type}`]: type,\n [`${prefixCls}-${sizeCls}`]: sizeCls,\n [`${prefixCls}-icon-only`]: !children && children !== 0 && !!iconType,\n [`${prefixCls}-background-ghost`]: ghost && !isUnBorderedButtonType(type),\n [`${prefixCls}-loading`]: innerLoading,\n [`${prefixCls}-two-chinese-chars`]: hasTwoCNChar && autoInsertSpace && !innerLoading,\n [`${prefixCls}-block`]: block,\n [`${prefixCls}-dangerous`]: !!danger,\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-disabled`]: hrefAndDisabled\n }, compactItemClassnames, className, rootClassName);\n const iconNode = icon && !innerLoading ? icon : /*#__PURE__*/React.createElement(LoadingIcon, {\n existIcon: !!icon,\n prefixCls: prefixCls,\n loading: !!innerLoading\n });\n const kids = children || children === 0 ? spaceChildren(children, isNeedInserted() && autoInsertSpace) : null;\n if (linkButtonRestProps.href !== undefined) {\n return wrapSSR( /*#__PURE__*/React.createElement(\"a\", Object.assign({}, linkButtonRestProps, {\n className: classes,\n onClick: handleClick,\n ref: buttonRef\n }), iconNode, kids));\n }\n let buttonNode = /*#__PURE__*/React.createElement(\"button\", Object.assign({}, rest, {\n type: htmlType,\n className: classes,\n onClick: handleClick,\n disabled: mergedDisabled,\n ref: buttonRef\n }), iconNode, kids);\n if (!isUnBorderedButtonType(type)) {\n buttonNode = /*#__PURE__*/React.createElement(Wave, {\n disabled: !!innerLoading\n }, buttonNode);\n }\n return wrapSSR(buttonNode);\n};\nconst Button = /*#__PURE__*/React.forwardRef(InternalButton);\nif (process.env.NODE_ENV !== 'production') {\n Button.displayName = 'Button';\n}\nButton.Group = Group;\nButton.__ANT_BUTTON = true;\nexport default Button;","import Button from './button';\nexport * from './buttonHelpers';\nexport default Button;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport RowContext from './RowContext';\nimport { useColStyle } from './style';\nfunction parseFlex(flex) {\n if (typeof flex === 'number') {\n return `${flex} ${flex} auto`;\n }\n if (/^\\d+(\\.\\d+)?(px|em|rem|%)$/.test(flex)) {\n return `0 0 ${flex}`;\n }\n return flex;\n}\nconst sizes = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];\nconst Col = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const {\n gutter,\n wrap,\n supportFlexGap\n } = React.useContext(RowContext);\n const {\n prefixCls: customizePrefixCls,\n span,\n order,\n offset,\n push,\n pull,\n className,\n children,\n flex,\n style\n } = props,\n others = __rest(props, [\"prefixCls\", \"span\", \"order\", \"offset\", \"push\", \"pull\", \"className\", \"children\", \"flex\", \"style\"]);\n const prefixCls = getPrefixCls('col', customizePrefixCls);\n const [wrapSSR, hashId] = useColStyle(prefixCls);\n let sizeClassObj = {};\n sizes.forEach(size => {\n let sizeProps = {};\n const propSize = props[size];\n if (typeof propSize === 'number') {\n sizeProps.span = propSize;\n } else if (typeof propSize === 'object') {\n sizeProps = propSize || {};\n }\n delete others[size];\n sizeClassObj = Object.assign(Object.assign({}, sizeClassObj), {\n [`${prefixCls}-${size}-${sizeProps.span}`]: sizeProps.span !== undefined,\n [`${prefixCls}-${size}-order-${sizeProps.order}`]: sizeProps.order || sizeProps.order === 0,\n [`${prefixCls}-${size}-offset-${sizeProps.offset}`]: sizeProps.offset || sizeProps.offset === 0,\n [`${prefixCls}-${size}-push-${sizeProps.push}`]: sizeProps.push || sizeProps.push === 0,\n [`${prefixCls}-${size}-pull-${sizeProps.pull}`]: sizeProps.pull || sizeProps.pull === 0,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n });\n });\n const classes = classNames(prefixCls, {\n [`${prefixCls}-${span}`]: span !== undefined,\n [`${prefixCls}-order-${order}`]: order,\n [`${prefixCls}-offset-${offset}`]: offset,\n [`${prefixCls}-push-${push}`]: push,\n [`${prefixCls}-pull-${pull}`]: pull\n }, className, sizeClassObj, hashId);\n const mergedStyle = {};\n // Horizontal gutter use padding\n if (gutter && gutter[0] > 0) {\n const horizontalGutter = gutter[0] / 2;\n mergedStyle.paddingLeft = horizontalGutter;\n mergedStyle.paddingRight = horizontalGutter;\n }\n // Vertical gutter use padding when gap not support\n if (gutter && gutter[1] > 0 && !supportFlexGap) {\n const verticalGutter = gutter[1] / 2;\n mergedStyle.paddingTop = verticalGutter;\n mergedStyle.paddingBottom = verticalGutter;\n }\n if (flex) {\n mergedStyle.flex = parseFlex(flex);\n // Hack for Firefox to avoid size issue\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n if (wrap === false && !mergedStyle.minWidth) {\n mergedStyle.minWidth = 0;\n }\n }\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n style: Object.assign(Object.assign({}, mergedStyle), style),\n className: classes,\n ref: ref\n }), children));\n});\nif (process.env.NODE_ENV !== 'production') {\n Col.displayName = 'Col';\n}\nexport default Col;","import { Col } from '../grid';\nexport default Col;","import * as React from 'react';\nconst DisabledContext = /*#__PURE__*/React.createContext(false);\nexport const DisabledContextProvider = _ref => {\n let {\n children,\n disabled\n } = _ref;\n const originDisabled = React.useContext(DisabledContext);\n return /*#__PURE__*/React.createElement(DisabledContext.Provider, {\n value: disabled !== null && disabled !== void 0 ? disabled : originDisabled\n }, children);\n};\nexport default DisabledContext;","import * as React from 'react';\nconst SizeContext = /*#__PURE__*/React.createContext(undefined);\nexport const SizeContextProvider = _ref => {\n let {\n children,\n size\n } = _ref;\n const originSize = React.useContext(SizeContext);\n return /*#__PURE__*/React.createElement(SizeContext.Provider, {\n value: size || originSize\n }, children);\n};\nexport default SizeContext;","import * as React from 'react';\nexport const defaultIconPrefixCls = 'anticon';\nconst defaultGetPrefixCls = (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? `ant-${suffixCls}` : 'ant';\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will cause circular dependency.\nexport const ConfigContext = /*#__PURE__*/React.createContext({\n // We provide a default function for Context without provider\n getPrefixCls: defaultGetPrefixCls,\n iconPrefixCls: defaultIconPrefixCls\n});\nexport const {\n Consumer: ConfigConsumer\n} = ConfigContext;","import * as React from 'react';\nimport warning from '../_util/warning';\nimport { changeConfirmLocale } from '../modal/locale';\nimport LocaleContext from './context';\nexport const ANT_MARK = 'internalMark';\nconst LocaleProvider = props => {\n const {\n locale = {},\n children,\n _ANT_MARK__\n } = props;\n if (process.env.NODE_ENV !== 'production') {\n process.env.NODE_ENV !== \"production\" ? warning(_ANT_MARK__ === ANT_MARK, 'LocaleProvider', '`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead: http://u.ant.design/locale') : void 0;\n }\n React.useEffect(() => {\n changeConfirmLocale(locale && locale.Modal);\n return () => {\n changeConfirmLocale();\n };\n }, [locale]);\n const getMemoizedContextValue = React.useMemo(() => Object.assign(Object.assign({}, locale), {\n exist: true\n }), [locale]);\n return /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n value: getMemoizedContextValue\n }, children);\n};\nif (process.env.NODE_ENV !== 'production') {\n LocaleProvider.displayName = 'LocaleProvider';\n}\nexport default LocaleProvider;","/* eslint-disable import/prefer-default-export, prefer-destructuring */\nimport { generate } from '@ant-design/colors';\nimport { TinyColor } from '@ctrl/tinycolor';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport warning from '../_util/warning';\nconst dynamicStyleMark = `-ant-${Date.now()}-${Math.random()}`;\nexport function getStyle(globalPrefixCls, theme) {\n const variables = {};\n const formatColor = (color, updater) => {\n let clone = color.clone();\n clone = (updater === null || updater === void 0 ? void 0 : updater(clone)) || clone;\n return clone.toRgbString();\n };\n const fillColor = (colorVal, type) => {\n const baseColor = new TinyColor(colorVal);\n const colorPalettes = generate(baseColor.toRgbString());\n variables[`${type}-color`] = formatColor(baseColor);\n variables[`${type}-color-disabled`] = colorPalettes[1];\n variables[`${type}-color-hover`] = colorPalettes[4];\n variables[`${type}-color-active`] = colorPalettes[6];\n variables[`${type}-color-outline`] = baseColor.clone().setAlpha(0.2).toRgbString();\n variables[`${type}-color-deprecated-bg`] = colorPalettes[0];\n variables[`${type}-color-deprecated-border`] = colorPalettes[2];\n };\n // ================ Primary Color ================\n if (theme.primaryColor) {\n fillColor(theme.primaryColor, 'primary');\n const primaryColor = new TinyColor(theme.primaryColor);\n const primaryColors = generate(primaryColor.toRgbString());\n // Legacy - We should use semantic naming standard\n primaryColors.forEach((color, index) => {\n variables[`primary-${index + 1}`] = color;\n });\n // Deprecated\n variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, c => c.lighten(35));\n variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, c => c.lighten(20));\n variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, c => c.tint(20));\n variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, c => c.tint(50));\n variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, c => c.setAlpha(c.getAlpha() * 0.12));\n const primaryActiveColor = new TinyColor(primaryColors[0]);\n variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, c => c.setAlpha(c.getAlpha() * 0.3));\n variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, c => c.darken(2));\n }\n // ================ Success Color ================\n if (theme.successColor) {\n fillColor(theme.successColor, 'success');\n }\n // ================ Warning Color ================\n if (theme.warningColor) {\n fillColor(theme.warningColor, 'warning');\n }\n // ================= Error Color =================\n if (theme.errorColor) {\n fillColor(theme.errorColor, 'error');\n }\n // ================= Info Color ==================\n if (theme.infoColor) {\n fillColor(theme.infoColor, 'info');\n }\n // Convert to css variables\n const cssList = Object.keys(variables).map(key => `--${globalPrefixCls}-${key}: ${variables[key]};`);\n return `\n :root {\n ${cssList.join('\\n')}\n }\n `.trim();\n}\nexport function registerTheme(globalPrefixCls, theme) {\n const style = getStyle(globalPrefixCls, theme);\n if (canUseDom()) {\n updateCSS(style, `${dynamicStyleMark}-dynamic-theme`);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'ConfigProvider', 'SSR do not support dynamic theme with css variables.') : void 0;\n }\n}","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { resetIcon } from '../../style';\nimport { useToken } from '../../theme/internal';\nconst useStyle = iconPrefixCls => {\n const [theme, token] = useToken();\n // Generate style for icons\n return useStyleRegister({\n theme,\n token,\n hashId: '',\n path: ['ant-design-icons', iconPrefixCls]\n }, () => [{\n [`.${iconPrefixCls}`]: Object.assign(Object.assign({}, resetIcon()), {\n [`.${iconPrefixCls} .${iconPrefixCls}-icon`]: {\n display: 'block'\n }\n })\n }]);\n};\nexport default useStyle;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { createTheme } from '@ant-design/cssinjs';\nimport IconContext from \"@ant-design/icons/es/components/Context\";\nimport { FormProvider as RcFormProvider } from 'rc-field-form';\nimport useMemo from \"rc-util/es/hooks/useMemo\";\nimport * as React from 'react';\nimport LocaleProvider, { ANT_MARK } from '../locale';\nimport LocaleReceiver from '../locale/LocaleReceiver';\nimport defaultLocale from '../locale/en_US';\nimport { DesignTokenContext } from '../theme/internal';\nimport defaultSeedToken from '../theme/themes/seed';\nimport { ConfigConsumer, ConfigContext, defaultIconPrefixCls } from './context';\nimport { registerTheme } from './cssVariables';\nimport { DisabledContextProvider } from './DisabledContext';\nimport useTheme from './hooks/useTheme';\nimport SizeContext, { SizeContextProvider } from './SizeContext';\nimport useStyle from './style';\nexport { ConfigContext, ConfigConsumer };\nexport { defaultIconPrefixCls };\nexport const configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale', 'pageHeader'];\n// These props is used by `useContext` directly in sub component\nconst PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'pageHeader', 'input', 'pagination', 'form', 'select'];\nexport const defaultPrefixCls = 'ant';\nlet globalPrefixCls;\nlet globalIconPrefixCls;\nfunction getGlobalPrefixCls() {\n return globalPrefixCls || defaultPrefixCls;\n}\nfunction getGlobalIconPrefixCls() {\n return globalIconPrefixCls || defaultIconPrefixCls;\n}\nconst setGlobalConfig = _ref => {\n let {\n prefixCls,\n iconPrefixCls,\n theme\n } = _ref;\n if (prefixCls !== undefined) {\n globalPrefixCls = prefixCls;\n }\n if (iconPrefixCls !== undefined) {\n globalIconPrefixCls = iconPrefixCls;\n }\n if (theme) {\n registerTheme(getGlobalPrefixCls(), theme);\n }\n};\nexport const globalConfig = () => ({\n getPrefixCls: (suffixCls, customizePrefixCls) => {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? `${getGlobalPrefixCls()}-${suffixCls}` : getGlobalPrefixCls();\n },\n getIconPrefixCls: getGlobalIconPrefixCls,\n getRootPrefixCls: () => {\n // If Global prefixCls provided, use this\n if (globalPrefixCls) {\n return globalPrefixCls;\n }\n // Fallback to default prefixCls\n return getGlobalPrefixCls();\n }\n});\nconst ProviderChildren = props => {\n var _a, _b;\n const {\n children,\n csp: customCsp,\n autoInsertSpaceInButton,\n form,\n locale,\n componentSize,\n direction,\n space,\n virtual,\n dropdownMatchSelectWidth,\n legacyLocale,\n parentContext,\n iconPrefixCls: customIconPrefixCls,\n theme,\n componentDisabled\n } = props;\n const getPrefixCls = React.useCallback((suffixCls, customizePrefixCls) => {\n const {\n prefixCls\n } = props;\n if (customizePrefixCls) return customizePrefixCls;\n const mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');\n return suffixCls ? `${mergedPrefixCls}-${suffixCls}` : mergedPrefixCls;\n }, [parentContext.getPrefixCls, props.prefixCls]);\n const iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || defaultIconPrefixCls;\n const shouldWrapSSR = iconPrefixCls !== parentContext.iconPrefixCls;\n const csp = customCsp || parentContext.csp;\n const wrapSSR = useStyle(iconPrefixCls);\n const mergedTheme = useTheme(theme, parentContext.theme);\n const baseConfig = {\n csp,\n autoInsertSpaceInButton,\n locale: locale || legacyLocale,\n direction,\n space,\n virtual,\n dropdownMatchSelectWidth,\n getPrefixCls,\n iconPrefixCls,\n theme: mergedTheme\n };\n const config = Object.assign({}, parentContext);\n Object.keys(baseConfig).forEach(key => {\n if (baseConfig[key] !== undefined) {\n config[key] = baseConfig[key];\n }\n });\n // Pass the props used by `useContext` directly with child component.\n // These props should merged into `config`.\n PASSED_PROPS.forEach(propName => {\n const propValue = props[propName];\n if (propValue) {\n config[propName] = propValue;\n }\n });\n // https://github.com/ant-design/ant-design/issues/27617\n const memoedConfig = useMemo(() => config, config, (prevConfig, currentConfig) => {\n const prevKeys = Object.keys(prevConfig);\n const currentKeys = Object.keys(currentConfig);\n return prevKeys.length !== currentKeys.length || prevKeys.some(key => prevConfig[key] !== currentConfig[key]);\n });\n const memoIconContextValue = React.useMemo(() => ({\n prefixCls: iconPrefixCls,\n csp\n }), [iconPrefixCls, csp]);\n let childNode = shouldWrapSSR ? wrapSSR(children) : children;\n // Additional Form provider\n let validateMessages = {};\n if (locale) {\n validateMessages = ((_a = locale.Form) === null || _a === void 0 ? void 0 : _a.defaultValidateMessages) || ((_b = defaultLocale.Form) === null || _b === void 0 ? void 0 : _b.defaultValidateMessages) || {};\n }\n if (form && form.validateMessages) {\n validateMessages = Object.assign(Object.assign({}, validateMessages), form.validateMessages);\n }\n if (Object.keys(validateMessages).length > 0) {\n childNode = /*#__PURE__*/React.createElement(RcFormProvider, {\n validateMessages: validateMessages\n }, children);\n }\n if (locale) {\n childNode = /*#__PURE__*/React.createElement(LocaleProvider, {\n locale: locale,\n _ANT_MARK__: ANT_MARK\n }, childNode);\n }\n if (iconPrefixCls || csp) {\n childNode = /*#__PURE__*/React.createElement(IconContext.Provider, {\n value: memoIconContextValue\n }, childNode);\n }\n if (componentSize) {\n childNode = /*#__PURE__*/React.createElement(SizeContextProvider, {\n size: componentSize\n }, childNode);\n }\n // ================================ Dynamic theme ================================\n const memoTheme = React.useMemo(() => {\n const _a = mergedTheme || {},\n {\n algorithm,\n token\n } = _a,\n rest = __rest(_a, [\"algorithm\", \"token\"]);\n const themeObj = algorithm && (!Array.isArray(algorithm) || algorithm.length > 0) ? createTheme(algorithm) : undefined;\n return Object.assign(Object.assign({}, rest), {\n theme: themeObj,\n token: Object.assign(Object.assign({}, defaultSeedToken), token)\n });\n }, [mergedTheme]);\n if (theme) {\n childNode = /*#__PURE__*/React.createElement(DesignTokenContext.Provider, {\n value: memoTheme\n }, childNode);\n }\n // =================================== Render ===================================\n if (componentDisabled !== undefined) {\n childNode = /*#__PURE__*/React.createElement(DisabledContextProvider, {\n disabled: componentDisabled\n }, childNode);\n }\n return /*#__PURE__*/React.createElement(ConfigContext.Provider, {\n value: memoedConfig\n }, childNode);\n};\nconst ConfigProvider = props => /*#__PURE__*/React.createElement(LocaleReceiver, null, (_, __, legacyLocale) => /*#__PURE__*/React.createElement(ConfigConsumer, null, context => /*#__PURE__*/React.createElement(ProviderChildren, Object.assign({\n parentContext: context,\n legacyLocale: legacyLocale\n}, props))));\nConfigProvider.ConfigContext = ConfigContext;\nConfigProvider.SizeContext = SizeContext;\nConfigProvider.config = setGlobalConfig;\nif (process.env.NODE_ENV !== 'production') {\n ConfigProvider.displayName = 'ConfigProvider';\n}\nexport default ConfigProvider;","import useMemo from \"rc-util/es/hooks/useMemo\";\nimport isEqual from \"rc-util/es/isEqual\";\nimport { defaultConfig } from '../../theme/internal';\nexport default function useTheme(theme, parentTheme) {\n const themeConfig = theme || {};\n const parentThemeConfig = themeConfig.inherit === false || !parentTheme ? defaultConfig : parentTheme;\n const mergedTheme = useMemo(() => {\n if (!theme) {\n return parentTheme;\n }\n // Override\n const mergedComponents = Object.assign({}, parentThemeConfig.components);\n Object.keys(theme.components || {}).forEach(componentName => {\n mergedComponents[componentName] = Object.assign(Object.assign({}, mergedComponents[componentName]), theme.components[componentName]);\n });\n // Base token\n return Object.assign(Object.assign(Object.assign({}, parentThemeConfig), themeConfig), {\n token: Object.assign(Object.assign({}, parentThemeConfig.token), themeConfig.token),\n components: mergedComponents\n });\n }, [themeConfig, parentThemeConfig], (prev, next) => prev.some((prevTheme, index) => {\n const nextTheme = next[index];\n return !isEqual(prevTheme, nextTheme, true);\n }));\n return mergedTheme;\n}","var locale = {\n locale: 'en_US',\n today: 'Today',\n now: 'Now',\n backToToday: 'Back to today',\n ok: 'OK',\n clear: 'Clear',\n month: 'Month',\n year: 'Year',\n timeSelect: 'select time',\n dateSelect: 'select date',\n weekSelect: 'Choose a week',\n monthSelect: 'Choose a month',\n yearSelect: 'Choose a year',\n decadeSelect: 'Choose a decade',\n yearFormat: 'YYYY',\n dateFormat: 'M/D/YYYY',\n dayFormat: 'D',\n dateTimeFormat: 'M/D/YYYY HH:mm:ss',\n monthBeforeYear: true,\n previousMonth: 'Previous month (PageUp)',\n nextMonth: 'Next month (PageDown)',\n previousYear: 'Last year (Control + left)',\n nextYear: 'Next year (Control + right)',\n previousDecade: 'Last decade',\n nextDecade: 'Next decade',\n previousCentury: 'Last century',\n nextCentury: 'Next century'\n};\nexport default locale;","import CalendarLocale from \"rc-picker/es/locale/en_US\";\nimport TimePickerLocale from '../../time-picker/locale/en_US';\n// Merge into a locale object\nconst locale = {\n lang: Object.assign({\n placeholder: 'Select date',\n yearPlaceholder: 'Select year',\n quarterPlaceholder: 'Select quarter',\n monthPlaceholder: 'Select month',\n weekPlaceholder: 'Select week',\n rangePlaceholder: ['Start date', 'End date'],\n rangeYearPlaceholder: ['Start year', 'End year'],\n rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],\n rangeMonthPlaceholder: ['Start month', 'End month'],\n rangeWeekPlaceholder: ['Start week', 'End week']\n }, CalendarLocale),\n timePickerLocale: Object.assign({}, TimePickerLocale)\n};\n// All settings at:\n// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json\nexport default locale;","import { FormProvider as RcFormProvider } from 'rc-field-form';\nimport omit from \"rc-util/es/omit\";\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nexport const FormContext = /*#__PURE__*/React.createContext({\n labelAlign: 'right',\n vertical: false,\n itemRef: () => {}\n});\nexport const NoStyleItemContext = /*#__PURE__*/React.createContext(null);\nexport const FormProvider = props => {\n const providerProps = omit(props, ['prefixCls']);\n return /*#__PURE__*/React.createElement(RcFormProvider, Object.assign({}, providerProps));\n};\nexport const FormItemPrefixContext = /*#__PURE__*/React.createContext({\n prefixCls: ''\n});\nexport const FormItemInputContext = /*#__PURE__*/React.createContext({});\nexport const NoFormStyle = _ref => {\n let {\n children,\n status,\n override\n } = _ref;\n const formItemInputContext = useContext(FormItemInputContext);\n const newFormItemInputContext = useMemo(() => {\n const newContext = Object.assign({}, formItemInputContext);\n if (override) {\n delete newContext.isFormItemInput;\n }\n if (status) {\n delete newContext.status;\n delete newContext.hasFeedback;\n delete newContext.feedbackIcon;\n }\n return newContext;\n }, [status, override, formItemInputContext]);\n return /*#__PURE__*/React.createElement(FormItemInputContext.Provider, {\n value: newFormItemInputContext\n }, children);\n};","import { createContext } from 'react';\nconst RowContext = /*#__PURE__*/createContext({});\nexport default RowContext;","import { genComponentStyleHook, mergeToken } from '../../theme/internal';\n// ============================== Row-Shared ==============================\nconst genGridRowStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // Grid system\n [componentCls]: {\n display: 'flex',\n flexFlow: 'row wrap',\n minWidth: 0,\n '&::before, &::after': {\n display: 'flex'\n },\n '&-no-wrap': {\n flexWrap: 'nowrap'\n },\n // The origin of the X-axis\n '&-start': {\n justifyContent: 'flex-start'\n },\n // The center of the X-axis\n '&-center': {\n justifyContent: 'center'\n },\n // The opposite of the X-axis\n '&-end': {\n justifyContent: 'flex-end'\n },\n '&-space-between': {\n justifyContent: 'space-between'\n },\n '&-space-around ': {\n justifyContent: 'space-around'\n },\n // Align at the top\n '&-top': {\n alignItems: 'flex-start'\n },\n // Align at the center\n '&-middle': {\n alignItems: 'center'\n },\n '&-bottom': {\n alignItems: 'flex-end'\n }\n }\n };\n};\n// ============================== Col-Shared ==============================\nconst genGridColStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // Grid system\n [componentCls]: {\n position: 'relative',\n maxWidth: '100%',\n // Prevent columns from collapsing when empty\n minHeight: 1\n }\n };\n};\nconst genLoopGridColumnsStyle = (token, sizeCls) => {\n const {\n componentCls,\n gridColumns\n } = token;\n const gridColumnsStyle = {};\n for (let i = gridColumns; i >= 0; i--) {\n if (i === 0) {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {\n display: 'none'\n };\n gridColumnsStyle[`${componentCls}-push-${i}`] = {\n insetInlineStart: 'auto'\n };\n gridColumnsStyle[`${componentCls}-pull-${i}`] = {\n insetInlineEnd: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: 'auto'\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineEnd: 0\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: 0\n };\n } else {\n gridColumnsStyle[`${componentCls}${sizeCls}-${i}`] = {\n display: 'block',\n flex: `0 0 ${i / gridColumns * 100}%`,\n maxWidth: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-push-${i}`] = {\n insetInlineStart: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-pull-${i}`] = {\n insetInlineEnd: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-offset-${i}`] = {\n marginInlineStart: `${i / gridColumns * 100}%`\n };\n gridColumnsStyle[`${componentCls}${sizeCls}-order-${i}`] = {\n order: i\n };\n }\n }\n return gridColumnsStyle;\n};\nconst genGridStyle = (token, sizeCls) => genLoopGridColumnsStyle(token, sizeCls);\nconst genGridMediaStyle = (token, screenSize, sizeCls) => ({\n [`@media (min-width: ${screenSize}px)`]: Object.assign({}, genGridStyle(token, sizeCls))\n});\n// ============================== Export ==============================\nexport const useRowStyle = genComponentStyleHook('Grid', token => [genGridRowStyle(token)]);\nexport const useColStyle = genComponentStyleHook('Grid', token => {\n const gridToken = mergeToken(token, {\n gridColumns: 24 // Row is divided into 24 parts in Grid\n });\n\n const gridMediaSizesMap = {\n '-sm': gridToken.screenSMMin,\n '-md': gridToken.screenMDMin,\n '-lg': gridToken.screenLGMin,\n '-xl': gridToken.screenXLMin,\n '-xxl': gridToken.screenXXLMin\n };\n return [genGridColStyle(gridToken), genGridStyle(gridToken, ''), genGridStyle(gridToken, '-xs'), Object.keys(gridMediaSizesMap).map(key => genGridMediaStyle(gridToken, gridMediaSizesMap[key], key)).reduce((pre, cur) => Object.assign(Object.assign({}, pre), cur), {})];\n});","/* eslint-disable no-nested-ternary */\nvar PIXEL_PATTERN = /margin|padding|width|height|max|min|offset/;\nvar removePixel = {\n left: true,\n top: true\n};\nvar floatMap = {\n cssFloat: 1,\n styleFloat: 1,\n float: 1\n};\nfunction getComputedStyle(node) {\n return node.nodeType === 1 ? node.ownerDocument.defaultView.getComputedStyle(node, null) : {};\n}\nfunction getStyleValue(node, type, value) {\n type = type.toLowerCase();\n if (value === 'auto') {\n if (type === 'height') {\n return node.offsetHeight;\n }\n if (type === 'width') {\n return node.offsetWidth;\n }\n }\n if (!(type in removePixel)) {\n removePixel[type] = PIXEL_PATTERN.test(type);\n }\n return removePixel[type] ? parseFloat(value) || 0 : value;\n}\nexport function get(node, name) {\n var length = arguments.length;\n var style = getComputedStyle(node);\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n return length === 1 ? style : getStyleValue(node, name, style[name] || node.style[name]);\n}\nexport function set(node, name, value) {\n var length = arguments.length;\n name = floatMap[name] ? 'cssFloat' in node.style ? 'cssFloat' : 'styleFloat' : name;\n if (length === 3) {\n if (typeof value === 'number' && PIXEL_PATTERN.test(name)) {\n value = \"\".concat(value, \"px\");\n }\n node.style[name] = value; // Number\n return value;\n }\n for (var x in name) {\n if (name.hasOwnProperty(x)) {\n set(node, x, name[x]);\n }\n }\n return getComputedStyle(node);\n}\nexport function getOuterWidth(el) {\n if (el === document.body) {\n return document.documentElement.clientWidth;\n }\n return el.offsetWidth;\n}\nexport function getOuterHeight(el) {\n if (el === document.body) {\n return window.innerHeight || document.documentElement.clientHeight;\n }\n return el.offsetHeight;\n}\nexport function getDocSize() {\n var width = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);\n var height = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n return {\n width: width,\n height: height\n };\n}\nexport function getClientSize() {\n var width = document.documentElement.clientWidth;\n var height = window.innerHeight || document.documentElement.clientHeight;\n return {\n width: width,\n height: height\n };\n}\nexport function getScroll() {\n return {\n scrollLeft: Math.max(document.documentElement.scrollLeft, document.body.scrollLeft),\n scrollTop: Math.max(document.documentElement.scrollTop, document.body.scrollTop)\n };\n}\nexport function getOffset(node) {\n var box = node.getBoundingClientRect();\n var docElem = document.documentElement;\n\n // < ie8 不支持 win.pageXOffset, 则使用 docElem.scrollLeft\n return {\n left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || document.body.clientLeft || 0),\n top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || document.body.clientTop || 0)\n };\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"visible\", \"onVisibleChange\", \"getContainer\", \"current\", \"countRender\"];\nimport * as React from 'react';\nimport { useState } from 'react';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport Preview from \"./Preview\";\n\n/* istanbul ignore next */\nexport var context = /*#__PURE__*/React.createContext({\n previewUrls: new Map(),\n setPreviewUrls: function setPreviewUrls() {\n return null;\n },\n current: null,\n setCurrent: function setCurrent() {\n return null;\n },\n setShowPreview: function setShowPreview() {\n return null;\n },\n setMousePosition: function setMousePosition() {\n return null;\n },\n registerImage: function registerImage() {\n return function () {\n return null;\n };\n },\n rootClassName: ''\n});\nvar Provider = context.Provider;\n\nvar Group = function Group(_ref) {\n var _ref$previewPrefixCls = _ref.previewPrefixCls,\n previewPrefixCls = _ref$previewPrefixCls === void 0 ? 'rc-image-preview' : _ref$previewPrefixCls,\n children = _ref.children,\n _ref$icons = _ref.icons,\n icons = _ref$icons === void 0 ? {} : _ref$icons,\n preview = _ref.preview;\n\n var _ref2 = _typeof(preview) === 'object' ? preview : {},\n _ref2$visible = _ref2.visible,\n previewVisible = _ref2$visible === void 0 ? undefined : _ref2$visible,\n _ref2$onVisibleChange = _ref2.onVisibleChange,\n onPreviewVisibleChange = _ref2$onVisibleChange === void 0 ? undefined : _ref2$onVisibleChange,\n _ref2$getContainer = _ref2.getContainer,\n getContainer = _ref2$getContainer === void 0 ? undefined : _ref2$getContainer,\n _ref2$current = _ref2.current,\n currentIndex = _ref2$current === void 0 ? 0 : _ref2$current,\n _ref2$countRender = _ref2.countRender,\n countRender = _ref2$countRender === void 0 ? undefined : _ref2$countRender,\n dialogProps = _objectWithoutProperties(_ref2, _excluded);\n\n var _useState = useState(new Map()),\n _useState2 = _slicedToArray(_useState, 2),\n previewUrls = _useState2[0],\n setPreviewUrls = _useState2[1];\n\n var _useState3 = useState(),\n _useState4 = _slicedToArray(_useState3, 2),\n current = _useState4[0],\n setCurrent = _useState4[1];\n\n var _useMergedState = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: onPreviewVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n isShowPreview = _useMergedState2[0],\n setShowPreview = _useMergedState2[1];\n\n var _useState5 = useState(null),\n _useState6 = _slicedToArray(_useState5, 2),\n mousePosition = _useState6[0],\n setMousePosition = _useState6[1];\n\n var isControlled = previewVisible !== undefined;\n var previewUrlsKeys = Array.from(previewUrls.keys());\n var currentControlledKey = previewUrlsKeys[currentIndex];\n var canPreviewUrls = new Map(Array.from(previewUrls).filter(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n canPreview = _ref4[1].canPreview;\n\n return !!canPreview;\n }).map(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n id = _ref6[0],\n url = _ref6[1].url;\n\n return [id, url];\n }));\n\n var registerImage = function registerImage(id, url) {\n var canPreview = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var unRegister = function unRegister() {\n setPreviewUrls(function (oldPreviewUrls) {\n var clonePreviewUrls = new Map(oldPreviewUrls);\n var deleteResult = clonePreviewUrls.delete(id);\n return deleteResult ? clonePreviewUrls : oldPreviewUrls;\n });\n };\n\n setPreviewUrls(function (oldPreviewUrls) {\n return new Map(oldPreviewUrls).set(id, {\n url: url,\n canPreview: canPreview\n });\n });\n return unRegister;\n };\n\n var onPreviewClose = function onPreviewClose(e) {\n e.stopPropagation();\n setShowPreview(false);\n setMousePosition(null);\n };\n\n React.useEffect(function () {\n setCurrent(currentControlledKey);\n }, [currentControlledKey]);\n React.useEffect(function () {\n if (!isShowPreview && isControlled) {\n setCurrent(currentControlledKey);\n }\n }, [currentControlledKey, isControlled, isShowPreview]);\n return /*#__PURE__*/React.createElement(Provider, {\n value: {\n isPreviewGroup: true,\n previewUrls: canPreviewUrls,\n setPreviewUrls: setPreviewUrls,\n current: current,\n setCurrent: setCurrent,\n setShowPreview: setShowPreview,\n setMousePosition: setMousePosition,\n registerImage: registerImage\n }\n }, children, /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n src: canPreviewUrls.get(current),\n icons: icons,\n getContainer: getContainer,\n countRender: countRender\n }, dialogProps)));\n};\n\nexport default Group;","/** Minimum scale */\nexport var MIN_SCALE = 1;\n/** Maximum Scale */\n\nexport var MAX_SCALE = 50;\n/** Scale the ratio base */\n\nexport var BASE_SCALE_RATIO = 1;\n/** The maximum zoom ratio when the mouse zooms in, adjustable */\n\nexport var WHEEL_MAX_SCALE_RATIO = 0.2;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport classnames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport Portal from '@rc-component/portal';\nimport { MIN_SCALE, MAX_SCALE } from \"./previewConfig\";\n\nvar Operations = function Operations(props) {\n var _countRender;\n\n var visible = props.visible,\n maskTransitionName = props.maskTransitionName,\n getContainer = props.getContainer,\n prefixCls = props.prefixCls,\n rootClassName = props.rootClassName,\n icons = props.icons,\n countRender = props.countRender,\n showSwitch = props.showSwitch,\n showProgress = props.showProgress,\n current = props.current,\n count = props.count,\n scale = props.scale,\n onSwitchLeft = props.onSwitchLeft,\n onSwitchRight = props.onSwitchRight,\n onClose = props.onClose,\n onZoomIn = props.onZoomIn,\n onZoomOut = props.onZoomOut,\n onRotateRight = props.onRotateRight,\n onRotateLeft = props.onRotateLeft;\n var rotateLeft = icons.rotateLeft,\n rotateRight = icons.rotateRight,\n zoomIn = icons.zoomIn,\n zoomOut = icons.zoomOut,\n close = icons.close,\n left = icons.left,\n right = icons.right;\n var toolClassName = \"\".concat(prefixCls, \"-operations-operation\");\n var iconClassName = \"\".concat(prefixCls, \"-operations-icon\");\n var tools = [{\n icon: close,\n onClick: onClose,\n type: 'close'\n }, {\n icon: zoomIn,\n onClick: onZoomIn,\n type: 'zoomIn',\n disabled: scale === MAX_SCALE\n }, {\n icon: zoomOut,\n onClick: onZoomOut,\n type: 'zoomOut',\n disabled: scale === MIN_SCALE\n }, {\n icon: rotateRight,\n onClick: onRotateRight,\n type: 'rotateRight'\n }, {\n icon: rotateLeft,\n onClick: onRotateLeft,\n type: 'rotateLeft'\n }];\n var operations = /*#__PURE__*/React.createElement(React.Fragment, null, showSwitch && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-left\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-left-disabled\"), current === 0)),\n onClick: onSwitchLeft\n }, left), /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-switch-right\"), _defineProperty({}, \"\".concat(prefixCls, \"-switch-right-disabled\"), current === count - 1)),\n onClick: onSwitchRight\n }, right)), /*#__PURE__*/React.createElement(\"ul\", {\n className: \"\".concat(prefixCls, \"-operations\")\n }, showProgress && /*#__PURE__*/React.createElement(\"li\", {\n className: \"\".concat(prefixCls, \"-operations-progress\")\n }, (_countRender = countRender === null || countRender === void 0 ? void 0 : countRender(current + 1, count)) !== null && _countRender !== void 0 ? _countRender : \"\".concat(current + 1, \" / \").concat(count)), tools.map(function (_ref) {\n var _classnames3;\n\n var icon = _ref.icon,\n onClick = _ref.onClick,\n type = _ref.type,\n disabled = _ref.disabled;\n return /*#__PURE__*/React.createElement(\"li\", {\n className: classnames(toolClassName, (_classnames3 = {}, _defineProperty(_classnames3, \"\".concat(prefixCls, \"-operations-operation-\").concat(type), true), _defineProperty(_classnames3, \"\".concat(prefixCls, \"-operations-operation-disabled\"), !!disabled), _classnames3)),\n onClick: onClick,\n key: type\n }, /*#__PURE__*/React.isValidElement(icon) ? /*#__PURE__*/React.cloneElement(icon, {\n className: iconClassName\n }) : icon);\n })));\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n motionName: maskTransitionName\n }, function (_ref2) {\n var className = _ref2.className,\n style = _ref2.style;\n return /*#__PURE__*/React.createElement(Portal, {\n open: true,\n getContainer: getContainer !== null && getContainer !== void 0 ? getContainer : document.body\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classnames(\"\".concat(prefixCls, \"-operations-wrapper\"), className, rootClassName),\n style: style\n }, operations));\n });\n};\n\nexport default Operations;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useState, useRef } from 'react';\nimport raf from \"rc-util/es/raf\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\nimport { MIN_SCALE, MAX_SCALE } from \"../previewConfig\";\nvar initialTransform = {\n x: 0,\n y: 0,\n rotate: 0,\n scale: 1\n};\nexport default function useImageTransform(imgRef) {\n var frame = useRef(null);\n var queue = useRef([]);\n\n var _useState = useState(initialTransform),\n _useState2 = _slicedToArray(_useState, 2),\n transform = _useState2[0],\n setTransform = _useState2[1];\n\n var resetTransform = function resetTransform() {\n setTransform(initialTransform);\n };\n /** Direct update transform */\n\n\n var updateTransform = function updateTransform(newTransform) {\n if (frame.current === null) {\n queue.current = [];\n frame.current = raf(function () {\n setTransform(function (preState) {\n var memoState = preState;\n queue.current.forEach(function (queueState) {\n memoState = _objectSpread(_objectSpread({}, memoState), queueState);\n });\n frame.current = null;\n return memoState;\n });\n });\n }\n\n queue.current.push(_objectSpread(_objectSpread({}, transform), newTransform));\n };\n /** Scale according to the position of clientX and clientY */\n\n\n var dispatchZoonChange = function dispatchZoonChange(ratio, clientX, clientY) {\n var _imgRef$current = imgRef.current,\n width = _imgRef$current.width,\n height = _imgRef$current.height,\n offsetWidth = _imgRef$current.offsetWidth,\n offsetHeight = _imgRef$current.offsetHeight,\n offsetLeft = _imgRef$current.offsetLeft,\n offsetTop = _imgRef$current.offsetTop;\n var newRatio = ratio;\n var newScale = transform.scale * ratio;\n\n if (newScale > MAX_SCALE) {\n newRatio = MAX_SCALE / transform.scale;\n newScale = MAX_SCALE;\n } else if (newScale < MIN_SCALE) {\n newRatio = MIN_SCALE / transform.scale;\n newScale = MIN_SCALE;\n }\n /** Default center point scaling */\n\n\n var mergedClientX = clientX !== null && clientX !== void 0 ? clientX : innerWidth / 2;\n var mergedClientY = clientY !== null && clientY !== void 0 ? clientY : innerHeight / 2;\n var diffRatio = newRatio - 1;\n /** Deviation calculated from image size */\n\n var diffImgX = diffRatio * width * 0.5;\n var diffImgY = diffRatio * height * 0.5;\n /** The difference between the click position and the edge of the document */\n\n var diffOffsetLeft = diffRatio * (mergedClientX - transform.x - offsetLeft);\n var diffOffsetTop = diffRatio * (mergedClientY - transform.y - offsetTop);\n /** Final positioning */\n\n var newX = transform.x - (diffOffsetLeft - diffImgX);\n var newY = transform.y - (diffOffsetTop - diffImgY);\n /**\n * When zooming the image\n * When the image size is smaller than the width and height of the window, the position is initialized\n */\n\n if (ratio < 1 && newScale === 1) {\n var mergedWidth = offsetWidth * newScale;\n var mergedHeight = offsetHeight * newScale;\n\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n\n if (mergedWidth <= clientWidth && mergedHeight <= clientHeight) {\n newX = 0;\n newY = 0;\n }\n }\n\n updateTransform({\n x: newX,\n y: newY,\n scale: newScale\n });\n };\n\n return {\n transform: transform,\n resetTransform: resetTransform,\n updateTransform: updateTransform,\n dispatchZoonChange: dispatchZoonChange\n };\n}\n;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { getClientSize } from \"rc-util/es/Dom/css\";\n\nfunction fixPoint(key, start, width, clientWidth) {\n var startAddWidth = start + width;\n var offsetStart = (width - clientWidth) / 2;\n\n if (width > clientWidth) {\n if (start > 0) {\n return _defineProperty({}, key, offsetStart);\n }\n\n if (start < 0 && startAddWidth < clientWidth) {\n return _defineProperty({}, key, -offsetStart);\n }\n } else if (start < 0 || startAddWidth > clientWidth) {\n return _defineProperty({}, key, start < 0 ? offsetStart : -offsetStart);\n }\n\n return {};\n}\n/**\n * Fix positon x,y point when\n *\n * Ele width && height < client\n * - Back origin\n *\n * - Ele width | height > clientWidth | clientHeight\n * - left | top > 0 -> Back 0\n * - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight\n *\n * Regardless of other\n */\n\n\nexport default function getFixScaleEleTransPosition(width, height, left, top) {\n var _getClientSize = getClientSize(),\n clientWidth = _getClientSize.width,\n clientHeight = _getClientSize.height;\n\n var fixPos = null;\n\n if (width <= clientWidth && height <= clientHeight) {\n fixPos = {\n x: 0,\n y: 0\n };\n } else if (width > clientWidth || height > clientHeight) {\n fixPos = _objectSpread(_objectSpread({}, fixPoint('x', left, width, clientWidth)), fixPoint('y', top, height, clientHeight));\n }\n\n return fixPos;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"src\", \"alt\", \"onClose\", \"afterClose\", \"visible\", \"icons\", \"rootClassName\", \"getContainer\", \"countRender\", \"scaleStep\", \"transitionName\", \"maskTransitionName\"];\nimport React, { useState, useEffect, useCallback, useRef, useContext } from 'react';\nimport Dialog from 'rc-dialog';\nimport classnames from 'classnames';\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport { warning } from \"rc-util/es/warning\";\nimport { context } from \"./PreviewGroup\";\nimport Operations from \"./Operations\";\nimport useImageTransform from \"./hooks/useImageTransform\";\nimport getFixScaleEleTransPosition from \"./getFixScaleEleTransPosition\";\nimport { BASE_SCALE_RATIO, WHEEL_MAX_SCALE_RATIO } from \"./previewConfig\";\n\nvar Preview = function Preview(props) {\n var prefixCls = props.prefixCls,\n src = props.src,\n alt = props.alt,\n onClose = props.onClose,\n afterClose = props.afterClose,\n visible = props.visible,\n _props$icons = props.icons,\n icons = _props$icons === void 0 ? {} : _props$icons,\n rootClassName = props.rootClassName,\n getContainer = props.getContainer,\n countRender = props.countRender,\n _props$scaleStep = props.scaleStep,\n scaleStep = _props$scaleStep === void 0 ? 0.5 : _props$scaleStep,\n _props$transitionName = props.transitionName,\n transitionName = _props$transitionName === void 0 ? 'zoom' : _props$transitionName,\n _props$maskTransition = props.maskTransitionName,\n maskTransitionName = _props$maskTransition === void 0 ? 'fade' : _props$maskTransition,\n restProps = _objectWithoutProperties(props, _excluded);\n\n var imgRef = useRef();\n var downPositionRef = useRef({\n deltaX: 0,\n deltaY: 0,\n transformX: 0,\n transformY: 0\n });\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n isMoving = _useState2[0],\n setMoving = _useState2[1];\n\n var _useContext = useContext(context),\n previewUrls = _useContext.previewUrls,\n current = _useContext.current,\n isPreviewGroup = _useContext.isPreviewGroup,\n setCurrent = _useContext.setCurrent;\n\n var previewGroupCount = previewUrls.size;\n var previewUrlsKeys = Array.from(previewUrls.keys());\n var currentPreviewIndex = previewUrlsKeys.indexOf(current);\n var combinationSrc = isPreviewGroup ? previewUrls.get(current) : src;\n var showLeftOrRightSwitches = isPreviewGroup && previewGroupCount > 1;\n var showOperationsProgress = isPreviewGroup && previewGroupCount >= 1;\n\n var _useImageTransform = useImageTransform(imgRef),\n transform = _useImageTransform.transform,\n resetTransform = _useImageTransform.resetTransform,\n updateTransform = _useImageTransform.updateTransform,\n dispatchZoonChange = _useImageTransform.dispatchZoonChange;\n\n var rotate = transform.rotate,\n scale = transform.scale;\n var wrapClassName = classnames(_defineProperty({}, \"\".concat(prefixCls, \"-moving\"), isMoving));\n\n var onAfterClose = function onAfterClose() {\n resetTransform();\n };\n\n var onZoomIn = function onZoomIn() {\n dispatchZoonChange(BASE_SCALE_RATIO + scaleStep);\n };\n\n var onZoomOut = function onZoomOut() {\n dispatchZoonChange(BASE_SCALE_RATIO - scaleStep);\n };\n\n var onRotateRight = function onRotateRight() {\n updateTransform({\n rotate: rotate + 90\n });\n };\n\n var onRotateLeft = function onRotateLeft() {\n updateTransform({\n rotate: rotate - 90\n });\n };\n\n var onSwitchLeft = function onSwitchLeft(event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (currentPreviewIndex > 0) {\n setCurrent(previewUrlsKeys[currentPreviewIndex - 1]);\n }\n };\n\n var onSwitchRight = function onSwitchRight(event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (currentPreviewIndex < previewGroupCount - 1) {\n setCurrent(previewUrlsKeys[currentPreviewIndex + 1]);\n }\n };\n\n var onMouseUp = function onMouseUp() {\n if (visible && isMoving) {\n setMoving(false);\n /** No need to restore the position when the picture is not moved, So as not to interfere with the click */\n\n var _downPositionRef$curr = downPositionRef.current,\n transformX = _downPositionRef$curr.transformX,\n transformY = _downPositionRef$curr.transformY;\n var hasChangedPosition = transform.x !== transformX && transform.y !== transformY;\n\n if (!hasChangedPosition) {\n return;\n }\n\n var width = imgRef.current.offsetWidth * scale;\n var height = imgRef.current.offsetHeight * scale; // eslint-disable-next-line @typescript-eslint/no-shadow\n\n var _imgRef$current$getBo = imgRef.current.getBoundingClientRect(),\n left = _imgRef$current$getBo.left,\n top = _imgRef$current$getBo.top;\n\n var isRotate = rotate % 180 !== 0;\n var fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);\n\n if (fixState) {\n updateTransform(_objectSpread({}, fixState));\n }\n }\n };\n\n var onMouseDown = function onMouseDown(event) {\n // Only allow main button\n if (event.button !== 0) return;\n event.preventDefault();\n event.stopPropagation();\n downPositionRef.current = {\n deltaX: event.pageX - transform.x,\n deltaY: event.pageY - transform.y,\n transformX: transform.x,\n transformY: transform.y\n };\n setMoving(true);\n };\n\n var onMouseMove = function onMouseMove(event) {\n if (visible && isMoving) {\n updateTransform({\n x: event.pageX - downPositionRef.current.deltaX,\n y: event.pageY - downPositionRef.current.deltaY\n });\n }\n };\n\n var onWheel = function onWheel(event) {\n if (!visible || event.deltaY == 0) return; // Scale ratio depends on the deltaY size\n\n var scaleRatio = Math.abs(event.deltaY / 100); // Limit the maximum scale ratio\n\n var mergedScaleRatio = Math.min(scaleRatio, WHEEL_MAX_SCALE_RATIO); // Scale the ratio each time\n\n var ratio = BASE_SCALE_RATIO + mergedScaleRatio * scaleStep;\n\n if (event.deltaY > 0) {\n ratio = BASE_SCALE_RATIO / ratio;\n }\n\n dispatchZoonChange(ratio, event.clientX, event.clientY);\n };\n\n var onKeyDown = useCallback(function (event) {\n if (!visible || !showLeftOrRightSwitches) return;\n\n if (event.keyCode === KeyCode.LEFT) {\n if (currentPreviewIndex > 0) {\n setCurrent(previewUrlsKeys[currentPreviewIndex - 1]);\n }\n } else if (event.keyCode === KeyCode.RIGHT) {\n if (currentPreviewIndex < previewGroupCount - 1) {\n setCurrent(previewUrlsKeys[currentPreviewIndex + 1]);\n }\n }\n }, [currentPreviewIndex, previewGroupCount, previewUrlsKeys, setCurrent, showLeftOrRightSwitches, visible]);\n\n var onDoubleClick = function onDoubleClick(event) {\n if (visible) {\n if (scale !== 1) {\n updateTransform({\n x: 0,\n y: 0,\n scale: 1\n });\n } else {\n dispatchZoonChange(BASE_SCALE_RATIO + scaleStep, event.clientX, event.clientY);\n }\n }\n };\n\n useEffect(function () {\n var onTopMouseUpListener;\n var onTopMouseMoveListener;\n var onMouseUpListener = addEventListener(window, 'mouseup', onMouseUp, false);\n var onMouseMoveListener = addEventListener(window, 'mousemove', onMouseMove, false);\n var onKeyDownListener = addEventListener(window, 'keydown', onKeyDown, false);\n\n try {\n // Resolve if in iframe lost event\n\n /* istanbul ignore next */\n if (window.top !== window.self) {\n onTopMouseUpListener = addEventListener(window.top, 'mouseup', onMouseUp, false);\n onTopMouseMoveListener = addEventListener(window.top, 'mousemove', onMouseMove, false);\n }\n } catch (error) {\n /* istanbul ignore next */\n warning(false, \"[rc-image] \".concat(error));\n }\n\n return function () {\n var _onTopMouseUpListener, _onTopMouseMoveListen;\n\n onMouseUpListener.remove();\n onMouseMoveListener.remove();\n onKeyDownListener.remove();\n /* istanbul ignore next */\n\n (_onTopMouseUpListener = onTopMouseUpListener) === null || _onTopMouseUpListener === void 0 ? void 0 : _onTopMouseUpListener.remove();\n /* istanbul ignore next */\n\n (_onTopMouseMoveListen = onTopMouseMoveListener) === null || _onTopMouseMoveListen === void 0 ? void 0 : _onTopMouseMoveListen.remove();\n };\n }, [visible, isMoving, onKeyDown]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Dialog, _extends({\n transitionName: transitionName,\n maskTransitionName: maskTransitionName,\n closable: false,\n keyboard: true,\n prefixCls: prefixCls,\n onClose: onClose,\n afterClose: onAfterClose,\n visible: visible,\n wrapClassName: wrapClassName,\n rootClassName: rootClassName,\n getContainer: getContainer\n }, restProps), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-img-wrapper\")\n }, /*#__PURE__*/React.createElement(\"img\", {\n width: props.width,\n height: props.height,\n onWheel: onWheel,\n onMouseDown: onMouseDown,\n onDoubleClick: onDoubleClick,\n ref: imgRef,\n className: \"\".concat(prefixCls, \"-img\"),\n src: combinationSrc,\n alt: alt,\n style: {\n transform: \"translate3d(\".concat(transform.x, \"px, \").concat(transform.y, \"px, 0) scale3d(\").concat(scale, \", \").concat(scale, \", 1) rotate(\").concat(rotate, \"deg)\")\n }\n }))), /*#__PURE__*/React.createElement(Operations, {\n visible: visible,\n maskTransitionName: maskTransitionName,\n getContainer: getContainer,\n prefixCls: prefixCls,\n rootClassName: rootClassName,\n icons: icons,\n countRender: countRender,\n showSwitch: showLeftOrRightSwitches,\n showProgress: showOperationsProgress,\n current: currentPreviewIndex,\n count: previewGroupCount,\n scale: scale,\n onSwitchLeft: onSwitchLeft,\n onSwitchRight: onSwitchRight,\n onZoomIn: onZoomIn,\n onZoomOut: onZoomOut,\n onRotateRight: onRotateRight,\n onRotateLeft: onRotateLeft,\n onClose: onClose\n }));\n};\n\nexport default Preview;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"src\", \"alt\", \"onPreviewClose\", \"prefixCls\", \"previewPrefixCls\", \"placeholder\", \"fallback\", \"width\", \"height\", \"style\", \"preview\", \"className\", \"onClick\", \"onError\", \"wrapperClassName\", \"wrapperStyle\", \"rootClassName\", \"crossOrigin\", \"decoding\", \"loading\", \"referrerPolicy\", \"sizes\", \"srcSet\", \"useMap\", \"draggable\"],\n _excluded2 = [\"src\", \"visible\", \"onVisibleChange\", \"getContainer\", \"mask\", \"maskClassName\", \"icons\", \"scaleStep\"];\nimport * as React from 'react';\nimport { useState } from 'react';\nimport cn from 'classnames';\nimport { getOffset } from \"rc-util/es/Dom/css\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport Preview from \"./Preview\";\nimport PreviewGroup, { context } from \"./PreviewGroup\";\nvar uuid = 0;\n\nvar ImageInternal = function ImageInternal(_ref) {\n var _imgCommonProps$style;\n\n var imgSrc = _ref.src,\n alt = _ref.alt,\n onInitialPreviewClose = _ref.onPreviewClose,\n _ref$prefixCls = _ref.prefixCls,\n prefixCls = _ref$prefixCls === void 0 ? 'rc-image' : _ref$prefixCls,\n _ref$previewPrefixCls = _ref.previewPrefixCls,\n previewPrefixCls = _ref$previewPrefixCls === void 0 ? \"\".concat(prefixCls, \"-preview\") : _ref$previewPrefixCls,\n placeholder = _ref.placeholder,\n fallback = _ref.fallback,\n width = _ref.width,\n height = _ref.height,\n style = _ref.style,\n _ref$preview = _ref.preview,\n preview = _ref$preview === void 0 ? true : _ref$preview,\n className = _ref.className,\n onClick = _ref.onClick,\n onImageError = _ref.onError,\n wrapperClassName = _ref.wrapperClassName,\n wrapperStyle = _ref.wrapperStyle,\n rootClassName = _ref.rootClassName,\n crossOrigin = _ref.crossOrigin,\n decoding = _ref.decoding,\n loading = _ref.loading,\n referrerPolicy = _ref.referrerPolicy,\n sizes = _ref.sizes,\n srcSet = _ref.srcSet,\n useMap = _ref.useMap,\n draggable = _ref.draggable,\n otherProps = _objectWithoutProperties(_ref, _excluded);\n\n var isCustomPlaceholder = placeholder && placeholder !== true;\n\n var _ref2 = _typeof(preview) === 'object' ? preview : {},\n previewSrc = _ref2.src,\n _ref2$visible = _ref2.visible,\n previewVisible = _ref2$visible === void 0 ? undefined : _ref2$visible,\n _ref2$onVisibleChange = _ref2.onVisibleChange,\n onPreviewVisibleChange = _ref2$onVisibleChange === void 0 ? onInitialPreviewClose : _ref2$onVisibleChange,\n _ref2$getContainer = _ref2.getContainer,\n getPreviewContainer = _ref2$getContainer === void 0 ? undefined : _ref2$getContainer,\n previewMask = _ref2.mask,\n maskClassName = _ref2.maskClassName,\n icons = _ref2.icons,\n scaleStep = _ref2.scaleStep,\n dialogProps = _objectWithoutProperties(_ref2, _excluded2);\n\n var src = previewSrc !== null && previewSrc !== void 0 ? previewSrc : imgSrc;\n var isControlled = previewVisible !== undefined;\n\n var _useMergedState = useMergedState(!!previewVisible, {\n value: previewVisible,\n onChange: onPreviewVisibleChange\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n isShowPreview = _useMergedState2[0],\n setShowPreview = _useMergedState2[1];\n\n var _useState = useState(isCustomPlaceholder ? 'loading' : 'normal'),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setStatus = _useState2[1];\n\n var _useState3 = useState(null),\n _useState4 = _slicedToArray(_useState3, 2),\n mousePosition = _useState4[0],\n setMousePosition = _useState4[1];\n\n var isError = status === 'error';\n\n var _React$useContext = React.useContext(context),\n isPreviewGroup = _React$useContext.isPreviewGroup,\n setCurrent = _React$useContext.setCurrent,\n setGroupShowPreview = _React$useContext.setShowPreview,\n setGroupMousePosition = _React$useContext.setMousePosition,\n registerImage = _React$useContext.registerImage;\n\n var _React$useState = React.useState(function () {\n uuid += 1;\n return uuid;\n }),\n _React$useState2 = _slicedToArray(_React$useState, 1),\n currentId = _React$useState2[0];\n\n var canPreview = !!preview;\n var isLoaded = React.useRef(false);\n\n var onLoad = function onLoad() {\n setStatus('normal');\n };\n\n var onError = function onError(e) {\n if (onImageError) {\n onImageError(e);\n }\n\n setStatus('error');\n };\n\n var onPreview = function onPreview(e) {\n if (!isControlled) {\n var _getOffset = getOffset(e.target),\n left = _getOffset.left,\n top = _getOffset.top;\n\n if (isPreviewGroup) {\n setCurrent(currentId);\n setGroupMousePosition({\n x: left,\n y: top\n });\n } else {\n setMousePosition({\n x: left,\n y: top\n });\n }\n }\n\n if (isPreviewGroup) {\n setGroupShowPreview(true);\n } else {\n setShowPreview(true);\n }\n\n if (onClick) onClick(e);\n };\n\n var onPreviewClose = function onPreviewClose(e) {\n e.stopPropagation();\n setShowPreview(false);\n\n if (!isControlled) {\n setMousePosition(null);\n }\n };\n\n var getImgRef = function getImgRef(img) {\n isLoaded.current = false;\n if (status !== 'loading') return;\n\n if (img !== null && img !== void 0 && img.complete && (img.naturalWidth || img.naturalHeight)) {\n isLoaded.current = true;\n onLoad();\n }\n }; // Keep order start\n // Resolve https://github.com/ant-design/ant-design/issues/28881\n // Only need unRegister when component unMount\n\n\n React.useEffect(function () {\n var unRegister = registerImage(currentId, src);\n return unRegister;\n }, []);\n React.useEffect(function () {\n registerImage(currentId, src, canPreview);\n }, [src, canPreview]); // Keep order end\n\n React.useEffect(function () {\n if (isError) {\n setStatus('normal');\n }\n\n if (isCustomPlaceholder && !isLoaded.current) {\n setStatus('loading');\n }\n }, [imgSrc]);\n var wrapperClass = cn(prefixCls, wrapperClassName, rootClassName, _defineProperty({}, \"\".concat(prefixCls, \"-error\"), isError));\n var mergedSrc = isError && fallback ? fallback : src;\n var imgCommonProps = {\n crossOrigin: crossOrigin,\n decoding: decoding,\n draggable: draggable,\n loading: loading,\n referrerPolicy: referrerPolicy,\n sizes: sizes,\n srcSet: srcSet,\n useMap: useMap,\n alt: alt,\n className: cn(\"\".concat(prefixCls, \"-img\"), _defineProperty({}, \"\".concat(prefixCls, \"-img-placeholder\"), placeholder === true), className),\n style: _objectSpread({\n height: height\n }, style)\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", _extends({}, otherProps, {\n className: wrapperClass,\n onClick: canPreview ? onPreview : onClick,\n style: _objectSpread({\n width: width,\n height: height\n }, wrapperStyle)\n }), /*#__PURE__*/React.createElement(\"img\", _extends({}, imgCommonProps, {\n ref: getImgRef\n }, isError && fallback ? {\n src: fallback\n } : {\n onLoad: onLoad,\n onError: onError,\n src: imgSrc\n }, {\n width: width,\n height: height\n })), status === 'loading' && /*#__PURE__*/React.createElement(\"div\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-placeholder\")\n }, placeholder), previewMask && canPreview && /*#__PURE__*/React.createElement(\"div\", {\n className: cn(\"\".concat(prefixCls, \"-mask\"), maskClassName),\n style: {\n display: ((_imgCommonProps$style = imgCommonProps.style) === null || _imgCommonProps$style === void 0 ? void 0 : _imgCommonProps$style.display) === 'none' ? 'none' : undefined\n }\n }, previewMask)), !isPreviewGroup && canPreview && /*#__PURE__*/React.createElement(Preview, _extends({\n \"aria-hidden\": !isShowPreview,\n visible: isShowPreview,\n prefixCls: previewPrefixCls,\n onClose: onPreviewClose,\n mousePosition: mousePosition,\n src: mergedSrc,\n alt: alt,\n getContainer: getPreviewContainer,\n icons: icons,\n scaleStep: scaleStep,\n rootClassName: rootClassName\n }, dialogProps)));\n};\n\nImageInternal.PreviewGroup = PreviewGroup;\nImageInternal.displayName = 'Image';\nexport default ImageInternal;","import Image from \"./Image\";\nexport * from \"./Image\";\nexport default Image;","// This icon file is generated automatically.\nvar RotateRightOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"defs\", \"attrs\": {}, \"children\": [{ \"tag\": \"style\", \"attrs\": {} }] }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-.4-12.6 6.1l-.2 64c-118.6.5-235.8 53.4-314.6 154.2A399.75 399.75 0 00123.5 631h74.9c-.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8z\" } }, { \"tag\": \"path\", \"attrs\": { \"d\": \"M880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32zm-44 402H396V494h440v326z\" } }] }, \"name\": \"rotate-right\", \"theme\": \"outlined\" };\nexport default RotateRightOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport RotateRightOutlinedSvg from \"@ant-design/icons-svg/es/asn/RotateRightOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar RotateRightOutlined = function RotateRightOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: RotateRightOutlinedSvg\n }));\n};\nRotateRightOutlined.displayName = 'RotateRightOutlined';\nexport default /*#__PURE__*/React.forwardRef(RotateRightOutlined);","// This icon file is generated automatically.\nvar ZoomInOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H519V309c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v134H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h118v134c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V519h118c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-in\", \"theme\": \"outlined\" };\nexport default ZoomInOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport ZoomInOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomInOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar ZoomInOutlined = function ZoomInOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: ZoomInOutlinedSvg\n }));\n};\nZoomInOutlined.displayName = 'ZoomInOutlined';\nexport default /*#__PURE__*/React.forwardRef(ZoomInOutlined);","// This icon file is generated automatically.\nvar ZoomOutOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M637 443H325c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h312c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8zm284 424L775 721c122.1-148.9 113.6-369.5-26-509-148-148.1-388.4-148.1-537 0-148.1 148.6-148.1 389 0 537 139.5 139.6 360.1 148.1 509 26l146 146c3.2 2.8 8.3 2.8 11 0l43-43c2.8-2.7 2.8-7.8 0-11zM696 696c-118.8 118.7-311.2 118.7-430 0-118.7-118.8-118.7-311.2 0-430 118.8-118.7 311.2-118.7 430 0 118.7 118.8 118.7 311.2 0 430z\" } }] }, \"name\": \"zoom-out\", \"theme\": \"outlined\" };\nexport default ZoomOutOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport ZoomOutOutlinedSvg from \"@ant-design/icons-svg/es/asn/ZoomOutOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar ZoomOutOutlined = function ZoomOutOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: ZoomOutOutlinedSvg\n }));\n};\nZoomOutOutlined.displayName = 'ZoomOutOutlined';\nexport default /*#__PURE__*/React.forwardRef(ZoomOutOutlined);","import { TinyColor } from '@ctrl/tinycolor';\nimport { genModalMaskStyle } from '../../modal/style';\nimport { initZoomMotion, initFadeMotion } from '../../style/motion';\nimport { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport { resetComponent, textEllipsis } from '../../style';\nexport const genBoxStyle = position => ({\n position: position || 'absolute',\n inset: 0\n});\nexport const genImageMaskStyle = token => {\n const {\n iconCls,\n motionDurationSlow,\n paddingXXS,\n marginXXS,\n prefixCls\n } = token;\n return {\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n background: new TinyColor('#000').setAlpha(0.5).toRgbString(),\n cursor: 'pointer',\n opacity: 0,\n transition: `opacity ${motionDurationSlow}`,\n [`.${prefixCls}-mask-info`]: Object.assign(Object.assign({}, textEllipsis), {\n padding: `0 ${paddingXXS}px`,\n [iconCls]: {\n marginInlineEnd: marginXXS\n }\n })\n };\n};\nexport const genPreviewOperationsStyle = token => {\n const {\n previewCls,\n modalMaskBg,\n paddingSM,\n imagePreviewOperationDisabledColor,\n motionDurationSlow\n } = token;\n const operationBg = new TinyColor(modalMaskBg).setAlpha(0.1);\n const operationBgHover = operationBg.clone().setAlpha(0.2);\n return {\n [`${previewCls}-operations`]: Object.assign(Object.assign({}, resetComponent(token)), {\n display: 'flex',\n flexDirection: 'row-reverse',\n alignItems: 'center',\n color: token.imagePreviewOperationColor,\n listStyle: 'none',\n background: operationBg.toRgbString(),\n pointerEvents: 'auto',\n '&-operation': {\n marginInlineStart: paddingSM,\n padding: paddingSM,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n '&:hover': {\n background: operationBgHover.toRgbString()\n },\n '&-disabled': {\n color: imagePreviewOperationDisabledColor,\n pointerEvents: 'none'\n },\n '&:last-of-type': {\n marginInlineStart: 0\n }\n },\n '&-progress': {\n position: 'absolute',\n left: {\n _skip_check_: true,\n value: '50%'\n },\n transform: 'translateX(-50%)'\n },\n '&-icon': {\n fontSize: token.imagePreviewOperationSize\n }\n })\n };\n};\nexport const genPreviewSwitchStyle = token => {\n const {\n modalMaskBg,\n iconCls,\n imagePreviewOperationDisabledColor,\n previewCls,\n zIndexPopup,\n motionDurationSlow\n } = token;\n const operationBg = new TinyColor(modalMaskBg).setAlpha(0.1);\n const operationBgHover = operationBg.clone().setAlpha(0.2);\n return {\n [`${previewCls}-switch-left, ${previewCls}-switch-right`]: {\n position: 'fixed',\n insetBlockStart: '50%',\n zIndex: zIndexPopup + 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: token.imagePreviewSwitchSize,\n height: token.imagePreviewSwitchSize,\n marginTop: -token.imagePreviewSwitchSize / 2,\n color: token.imagePreviewOperationColor,\n background: operationBg.toRgbString(),\n borderRadius: '50%',\n transform: `translateY(-50%)`,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n pointerEvents: 'auto',\n '&:hover': {\n background: operationBgHover.toRgbString()\n },\n [`&-disabled`]: {\n '&, &:hover': {\n color: imagePreviewOperationDisabledColor,\n background: 'transparent',\n cursor: 'not-allowed',\n [`> ${iconCls}`]: {\n cursor: 'not-allowed'\n }\n }\n },\n [`> ${iconCls}`]: {\n fontSize: token.imagePreviewOperationSize\n }\n },\n [`${previewCls}-switch-left`]: {\n insetInlineStart: token.marginSM\n },\n [`${previewCls}-switch-right`]: {\n insetInlineEnd: token.marginSM\n }\n };\n};\nexport const genImagePreviewStyle = token => {\n const {\n motionEaseOut,\n previewCls,\n motionDurationSlow,\n componentCls\n } = token;\n return [{\n [`${componentCls}-preview-root`]: {\n [previewCls]: {\n height: '100%',\n textAlign: 'center',\n pointerEvents: 'none'\n },\n [`${previewCls}-body`]: Object.assign(Object.assign({}, genBoxStyle()), {\n overflow: 'hidden'\n }),\n [`${previewCls}-img`]: {\n maxWidth: '100%',\n maxHeight: '100%',\n verticalAlign: 'middle',\n transform: 'scale3d(1, 1, 1)',\n cursor: 'grab',\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n userSelect: 'none',\n pointerEvents: 'auto',\n '&-wrapper': Object.assign(Object.assign({}, genBoxStyle()), {\n transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,\n // https://github.com/ant-design/ant-design/issues/39913\n // TailwindCSS will reset img default style.\n // Let's set back.\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n '&::before': {\n display: 'inline-block',\n width: 1,\n height: '50%',\n marginInlineEnd: -1,\n content: '\"\"'\n }\n })\n },\n [`${previewCls}-moving`]: {\n [`${previewCls}-preview-img`]: {\n cursor: 'grabbing',\n '&-wrapper': {\n transitionDuration: '0s'\n }\n }\n }\n }\n },\n // Override\n {\n [`${componentCls}-preview-root`]: {\n [`${previewCls}-wrap`]: {\n zIndex: token.zIndexPopup\n }\n }\n },\n // Preview operations & switch\n {\n [`${componentCls}-preview-operations-wrapper`]: {\n position: 'fixed',\n insetBlockStart: 0,\n insetInlineEnd: 0,\n zIndex: token.zIndexPopup + 1,\n width: '100%'\n },\n '&': [genPreviewOperationsStyle(token), genPreviewSwitchStyle(token)]\n }];\n};\nconst genImageStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // ============================== image ==============================\n [componentCls]: {\n position: 'relative',\n display: 'inline-block',\n [`${componentCls}-img`]: {\n width: '100%',\n height: 'auto',\n verticalAlign: 'middle'\n },\n [`${componentCls}-img-placeholder`]: {\n backgroundColor: token.colorBgContainerDisabled,\n backgroundImage: \"url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')\",\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center center',\n backgroundSize: '30%'\n },\n [`${componentCls}-mask`]: Object.assign({}, genImageMaskStyle(token)),\n [`${componentCls}-mask:hover`]: {\n opacity: 1\n },\n [`${componentCls}-placeholder`]: Object.assign({}, genBoxStyle())\n }\n };\n};\nconst genPreviewMotion = token => {\n const {\n previewCls\n } = token;\n return {\n [`${previewCls}-root`]: initZoomMotion(token, 'zoom'),\n [`&`]: initFadeMotion(token, true)\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Image', token => {\n const imagePreviewOperationColor = new TinyColor(token.colorTextLightSolid);\n const previewCls = `${token.componentCls}-preview`;\n const imageToken = mergeToken(token, {\n previewCls,\n imagePreviewOperationColor: imagePreviewOperationColor.toRgbString(),\n imagePreviewOperationDisabledColor: new TinyColor(imagePreviewOperationColor).setAlpha(0.25).toRgbString(),\n modalMaskBg: new TinyColor('#000').setAlpha(0.45).toRgbString(),\n imagePreviewOperationSize: token.fontSizeIcon * 1.5,\n imagePreviewSwitchSize: token.controlHeightLG\n });\n return [genImageStyle(imageToken), genImagePreviewStyle(imageToken), genModalMaskStyle(mergeToken(imageToken, {\n componentCls: previewCls\n })), genPreviewMotion(imageToken)];\n}, token => ({\n zIndexPopup: token.zIndexPopupBase + 80\n}));","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport LeftOutlined from \"@ant-design/icons/es/icons/LeftOutlined\";\nimport RightOutlined from \"@ant-design/icons/es/icons/RightOutlined\";\nimport RotateLeftOutlined from \"@ant-design/icons/es/icons/RotateLeftOutlined\";\nimport RotateRightOutlined from \"@ant-design/icons/es/icons/RotateRightOutlined\";\nimport ZoomInOutlined from \"@ant-design/icons/es/icons/ZoomInOutlined\";\nimport ZoomOutOutlined from \"@ant-design/icons/es/icons/ZoomOutOutlined\";\nimport RcImage from 'rc-image';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport { getTransitionName } from '../_util/motion';\n// CSSINJS\nimport useStyle from './style';\nexport const icons = {\n rotateLeft: /*#__PURE__*/React.createElement(RotateLeftOutlined, null),\n rotateRight: /*#__PURE__*/React.createElement(RotateRightOutlined, null),\n zoomIn: /*#__PURE__*/React.createElement(ZoomInOutlined, null),\n zoomOut: /*#__PURE__*/React.createElement(ZoomOutOutlined, null),\n close: /*#__PURE__*/React.createElement(CloseOutlined, null),\n left: /*#__PURE__*/React.createElement(LeftOutlined, null),\n right: /*#__PURE__*/React.createElement(RightOutlined, null)\n};\nconst InternalPreviewGroup = _a => {\n var {\n previewPrefixCls: customizePrefixCls,\n preview\n } = _a,\n props = __rest(_a, [\"previewPrefixCls\", \"preview\"]);\n const {\n getPrefixCls\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const previewPrefixCls = `${prefixCls}-preview`;\n const rootPrefixCls = getPrefixCls();\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const mergedPreview = React.useMemo(() => {\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n return Object.assign(Object.assign({}, _preview), {\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),\n rootClassName: hashId\n });\n }, [preview]);\n return wrapSSR( /*#__PURE__*/React.createElement(RcImage.PreviewGroup, Object.assign({\n preview: mergedPreview,\n previewPrefixCls: previewPrefixCls,\n icons: icons\n }, props)));\n};\nexport default InternalPreviewGroup;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport EyeOutlined from \"@ant-design/icons/es/icons/EyeOutlined\";\nimport classNames from 'classnames';\nimport RcImage from 'rc-image';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport defaultLocale from '../locale/en_US';\nimport { getTransitionName } from '../_util/motion';\n// CSSINJS\nimport PreviewGroup, { icons } from './PreviewGroup';\nimport useStyle from './style';\nconst Image = _a => {\n var {\n prefixCls: customizePrefixCls,\n preview,\n rootClassName\n } = _a,\n otherProps = __rest(_a, [\"prefixCls\", \"preview\", \"rootClassName\"]);\n const {\n getPrefixCls,\n locale: contextLocale = defaultLocale,\n getPopupContainer: getContextPopupContainer\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('image', customizePrefixCls);\n const rootPrefixCls = getPrefixCls();\n const imageLocale = contextLocale.Image || defaultLocale.Image;\n // Style\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const mergedRootClassName = classNames(rootClassName, hashId);\n const mergedPreview = React.useMemo(() => {\n if (preview === false) {\n return preview;\n }\n const _preview = typeof preview === 'object' ? preview : {};\n const {\n getContainer\n } = _preview,\n restPreviewProps = __rest(_preview, [\"getContainer\"]);\n return Object.assign(Object.assign({\n mask: /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-mask-info`\n }, /*#__PURE__*/React.createElement(EyeOutlined, null), imageLocale === null || imageLocale === void 0 ? void 0 : imageLocale.preview),\n icons\n }, restPreviewProps), {\n getContainer: getContainer || getContextPopupContainer,\n transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),\n maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName)\n });\n }, [preview, imageLocale]);\n return wrapSSR( /*#__PURE__*/React.createElement(RcImage, Object.assign({\n prefixCls: `${prefixCls}`,\n preview: mergedPreview,\n rootClassName: mergedRootClassName\n }, otherProps)));\n};\nImage.PreviewGroup = PreviewGroup;\nif (process.env.NODE_ENV !== 'production') {\n Image.displayName = 'Image';\n}\nexport default Image;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport classNames from 'classnames';\nimport RcInput from 'rc-input';\nimport { composeRef } from \"rc-util/es/ref\";\nimport React, { forwardRef, useContext, useEffect, useRef } from 'react';\nimport { ConfigContext } from '../config-provider';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport SizeContext from '../config-provider/SizeContext';\nimport { FormItemInputContext, NoFormStyle } from '../form/context';\nimport { NoCompactStyle, useCompactItemContext } from '../space/Compact';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport warning from '../_util/warning';\nimport useRemovePasswordTimeout from './hooks/useRemovePasswordTimeout';\nimport { hasPrefixSuffix } from './utils';\n// CSSINJS\nimport useStyle from './style';\nexport function triggerFocus(element, option) {\n if (!element) {\n return;\n }\n element.focus(option);\n // Selection content\n const {\n cursor\n } = option || {};\n if (cursor) {\n const len = element.value.length;\n switch (cursor) {\n case 'start':\n element.setSelectionRange(0, 0);\n break;\n case 'end':\n element.setSelectionRange(len, len);\n break;\n default:\n element.setSelectionRange(0, len);\n break;\n }\n }\n}\nconst Input = /*#__PURE__*/forwardRef((props, ref) => {\n const {\n prefixCls: customizePrefixCls,\n bordered = true,\n status: customStatus,\n size: customSize,\n disabled: customDisabled,\n onBlur,\n onFocus,\n suffix,\n allowClear,\n addonAfter,\n addonBefore,\n className,\n rootClassName,\n onChange\n } = props,\n rest = __rest(props, [\"prefixCls\", \"bordered\", \"status\", \"size\", \"disabled\", \"onBlur\", \"onFocus\", \"suffix\", \"allowClear\", \"addonAfter\", \"addonBefore\", \"className\", \"rootClassName\", \"onChange\"]);\n const {\n getPrefixCls,\n direction,\n input\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('input', customizePrefixCls);\n const inputRef = useRef(null);\n // Style\n const [wrapSSR, hashId] = useStyle(prefixCls);\n // ===================== Compact Item =====================\n const {\n compactSize,\n compactItemClassnames\n } = useCompactItemContext(prefixCls, direction);\n // ===================== Size =====================\n const size = React.useContext(SizeContext);\n const mergedSize = compactSize || customSize || size;\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n // ===================== Status =====================\n const {\n status: contextStatus,\n hasFeedback,\n feedbackIcon\n } = useContext(FormItemInputContext);\n const mergedStatus = getMergedStatus(contextStatus, customStatus);\n // ===================== Focus warning =====================\n const inputHasPrefixSuffix = hasPrefixSuffix(props) || !!hasFeedback;\n const prevHasPrefixSuffix = useRef(inputHasPrefixSuffix);\n useEffect(() => {\n var _a;\n if (inputHasPrefixSuffix && !prevHasPrefixSuffix.current) {\n process.env.NODE_ENV !== \"production\" ? warning(document.activeElement === ((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.input), 'Input', `When Input is focused, dynamic add or remove prefix / suffix will make it lose focus caused by dom structure change. Read more: https://ant.design/components/input/#FAQ`) : void 0;\n }\n prevHasPrefixSuffix.current = inputHasPrefixSuffix;\n }, [inputHasPrefixSuffix]);\n // ===================== Remove Password value =====================\n const removePasswordTimeout = useRemovePasswordTimeout(inputRef, true);\n const handleBlur = e => {\n removePasswordTimeout();\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n };\n const handleFocus = e => {\n removePasswordTimeout();\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);\n };\n const handleChange = e => {\n removePasswordTimeout();\n onChange === null || onChange === void 0 ? void 0 : onChange(e);\n };\n const suffixNode = (hasFeedback || suffix) && /*#__PURE__*/React.createElement(React.Fragment, null, suffix, hasFeedback && feedbackIcon);\n // Allow clear\n let mergedAllowClear;\n if (typeof allowClear === 'object' && (allowClear === null || allowClear === void 0 ? void 0 : allowClear.clearIcon)) {\n mergedAllowClear = allowClear;\n } else if (allowClear) {\n mergedAllowClear = {\n clearIcon: /*#__PURE__*/React.createElement(CloseCircleFilled, null)\n };\n }\n return wrapSSR( /*#__PURE__*/React.createElement(RcInput, Object.assign({\n ref: composeRef(ref, inputRef),\n prefixCls: prefixCls,\n autoComplete: input === null || input === void 0 ? void 0 : input.autoComplete\n }, rest, {\n disabled: mergedDisabled,\n onBlur: handleBlur,\n onFocus: handleFocus,\n suffix: suffixNode,\n allowClear: mergedAllowClear,\n className: classNames(className, rootClassName, compactItemClassnames),\n onChange: handleChange,\n addonAfter: addonAfter && /*#__PURE__*/React.createElement(NoCompactStyle, null, /*#__PURE__*/React.createElement(NoFormStyle, {\n override: true,\n status: true\n }, addonAfter)),\n addonBefore: addonBefore && /*#__PURE__*/React.createElement(NoCompactStyle, null, /*#__PURE__*/React.createElement(NoFormStyle, {\n override: true,\n status: true\n }, addonBefore)),\n classes: {\n input: classNames({\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-lg`]: mergedSize === 'large',\n [`${prefixCls}-rtl`]: direction === 'rtl',\n [`${prefixCls}-borderless`]: !bordered\n }, !inputHasPrefixSuffix && getStatusClassNames(prefixCls, mergedStatus), hashId),\n affixWrapper: classNames({\n [`${prefixCls}-affix-wrapper-sm`]: mergedSize === 'small',\n [`${prefixCls}-affix-wrapper-lg`]: mergedSize === 'large',\n [`${prefixCls}-affix-wrapper-rtl`]: direction === 'rtl',\n [`${prefixCls}-affix-wrapper-borderless`]: !bordered\n }, getStatusClassNames(`${prefixCls}-affix-wrapper`, mergedStatus, hasFeedback), hashId),\n wrapper: classNames({\n [`${prefixCls}-group-rtl`]: direction === 'rtl'\n }, hashId),\n group: classNames({\n [`${prefixCls}-group-wrapper-sm`]: mergedSize === 'small',\n [`${prefixCls}-group-wrapper-lg`]: mergedSize === 'large',\n [`${prefixCls}-group-wrapper-rtl`]: direction === 'rtl'\n }, getStatusClassNames(`${prefixCls}-group-wrapper`, mergedStatus, hasFeedback), hashId)\n }\n })));\n});\nexport default Input;","// eslint-disable-next-line import/prefer-default-export\nexport function hasPrefixSuffix(props) {\n return !!(props.prefix || props.suffix || props.allowClear);\n}","// Thanks to https://github.com/andreypopp/react-textarea-autosize/\n\n/**\n * calculateNodeHeight(uiTextNode, useCache = false)\n */\nvar HIDDEN_TEXTAREA_STYLE = \"\\n min-height:0 !important;\\n max-height:none !important;\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important;\\n pointer-events: none !important;\\n\";\nvar SIZING_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'font-variant', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing', 'word-break', 'white-space'];\nvar computedStyleCache = {};\nvar hiddenTextarea;\nexport function calculateNodeStyling(node) {\n var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var nodeRef = node.getAttribute('id') || node.getAttribute('data-reactid') || node.getAttribute('name');\n\n if (useCache && computedStyleCache[nodeRef]) {\n return computedStyleCache[nodeRef];\n }\n\n var style = window.getComputedStyle(node);\n var boxSizing = style.getPropertyValue('box-sizing') || style.getPropertyValue('-moz-box-sizing') || style.getPropertyValue('-webkit-box-sizing');\n var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n var sizingStyle = SIZING_STYLE.map(function (name) {\n return \"\".concat(name, \":\").concat(style.getPropertyValue(name));\n }).join(';');\n var nodeInfo = {\n sizingStyle: sizingStyle,\n paddingSize: paddingSize,\n borderSize: borderSize,\n boxSizing: boxSizing\n };\n\n if (useCache && nodeRef) {\n computedStyleCache[nodeRef] = nodeInfo;\n }\n\n return nodeInfo;\n}\nexport default function calculateAutoSizeStyle(uiTextNode) {\n var useCache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var minRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var maxRows = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n hiddenTextarea.setAttribute('tab-index', '-1');\n hiddenTextarea.setAttribute('aria-hidden', 'true');\n document.body.appendChild(hiddenTextarea);\n } // Fix wrap=\"off\" issue\n // https://github.com/ant-design/ant-design/issues/6577\n\n\n if (uiTextNode.getAttribute('wrap')) {\n hiddenTextarea.setAttribute('wrap', uiTextNode.getAttribute('wrap'));\n } else {\n hiddenTextarea.removeAttribute('wrap');\n } // Copy all CSS properties that have an impact on the height of the content in\n // the textbox\n\n\n var _calculateNodeStyling = calculateNodeStyling(uiTextNode, useCache),\n paddingSize = _calculateNodeStyling.paddingSize,\n borderSize = _calculateNodeStyling.borderSize,\n boxSizing = _calculateNodeStyling.boxSizing,\n sizingStyle = _calculateNodeStyling.sizingStyle; // Need to have the overflow attribute to hide the scrollbar otherwise\n // text-lines will not calculated properly as the shadow will technically be\n // narrower for content\n\n\n hiddenTextarea.setAttribute('style', \"\".concat(sizingStyle, \";\").concat(HIDDEN_TEXTAREA_STYLE));\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || '';\n var minHeight = undefined;\n var maxHeight = undefined;\n var overflowY;\n var height = hiddenTextarea.scrollHeight;\n\n if (boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n height += borderSize;\n } else if (boxSizing === 'content-box') {\n // remove padding, since height = content\n height -= paddingSize;\n }\n\n if (minRows !== null || maxRows !== null) {\n // measure height of a textarea with a single row\n hiddenTextarea.value = ' ';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows;\n\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n\n height = Math.max(minHeight, height);\n }\n\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows;\n\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n\n overflowY = height > maxHeight ? '' : 'hidden';\n height = Math.min(maxHeight, height);\n }\n }\n\n var style = {\n height: height,\n overflowY: overflowY,\n resize: 'none'\n };\n\n if (minHeight) {\n style.minHeight = minHeight;\n }\n\n if (maxHeight) {\n style.maxHeight = maxHeight;\n }\n\n return style;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"onPressEnter\", \"defaultValue\", \"value\", \"autoSize\", \"onResize\", \"className\", \"style\", \"disabled\", \"onChange\", \"onInternalAutoSize\"];\nimport classNames from 'classnames';\nimport ResizeObserver from 'rc-resize-observer';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nimport calculateAutoSizeStyle from \"./calculateNodeHeight\";\nvar RESIZE_START = 0;\nvar RESIZE_MEASURING = 1;\nvar RESIZE_STABLE = 2;\nvar ResizableTextArea = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _ref = props,\n prefixCls = _ref.prefixCls,\n onPressEnter = _ref.onPressEnter,\n defaultValue = _ref.defaultValue,\n value = _ref.value,\n autoSize = _ref.autoSize,\n onResize = _ref.onResize,\n className = _ref.className,\n style = _ref.style,\n disabled = _ref.disabled,\n onChange = _ref.onChange,\n onInternalAutoSize = _ref.onInternalAutoSize,\n restProps = _objectWithoutProperties(_ref, _excluded); // =============================== Value ================================\n\n\n var _useMergedState = useMergedState(defaultValue, {\n value: value,\n postState: function postState(val) {\n return val !== null && val !== void 0 ? val : '';\n }\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n mergedValue = _useMergedState2[0],\n setMergedValue = _useMergedState2[1];\n\n var onInternalChange = function onInternalChange(event) {\n setMergedValue(event.target.value);\n onChange === null || onChange === void 0 ? void 0 : onChange(event);\n }; // ================================ Ref =================================\n\n\n var textareaRef = React.useRef();\n React.useImperativeHandle(ref, function () {\n return {\n textArea: textareaRef.current\n };\n }); // ============================== AutoSize ==============================\n\n var _React$useMemo = React.useMemo(function () {\n if (autoSize && _typeof(autoSize) === 'object') {\n return [autoSize.minRows, autoSize.maxRows];\n }\n\n return [];\n }, [autoSize]),\n _React$useMemo2 = _slicedToArray(_React$useMemo, 2),\n minRows = _React$useMemo2[0],\n maxRows = _React$useMemo2[1];\n\n var needAutoSize = !!autoSize; // =============================== Scroll ===============================\n // https://github.com/ant-design/ant-design/issues/21870\n\n var fixFirefoxAutoScroll = function fixFirefoxAutoScroll() {\n try {\n // FF has bug with jump of scroll to top. We force back here.\n if (document.activeElement === textareaRef.current) {\n var _textareaRef$current = textareaRef.current,\n selectionStart = _textareaRef$current.selectionStart,\n selectionEnd = _textareaRef$current.selectionEnd,\n scrollTop = _textareaRef$current.scrollTop; // Fix Safari bug which not rollback when break line\n // This makes Chinese IME can't input. Do not fix this\n // const { value: tmpValue } = textareaRef.current;\n // textareaRef.current.value = '';\n // textareaRef.current.value = tmpValue;\n\n textareaRef.current.setSelectionRange(selectionStart, selectionEnd);\n textareaRef.current.scrollTop = scrollTop;\n }\n } catch (e) {// Fix error in Chrome:\n // Failed to read the 'selectionStart' property from 'HTMLInputElement'\n // http://stackoverflow.com/q/21177489/3040605\n }\n }; // =============================== Resize ===============================\n\n\n var _React$useState = React.useState(RESIZE_STABLE),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n resizeState = _React$useState2[0],\n setResizeState = _React$useState2[1];\n\n var _React$useState3 = React.useState(),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n autoSizeStyle = _React$useState4[0],\n setAutoSizeStyle = _React$useState4[1];\n\n var startResize = function startResize() {\n setResizeState(RESIZE_START);\n\n if (process.env.NODE_ENV === 'test') {\n onInternalAutoSize === null || onInternalAutoSize === void 0 ? void 0 : onInternalAutoSize();\n }\n }; // Change to trigger resize measure\n\n\n useLayoutEffect(function () {\n if (needAutoSize) {\n startResize();\n }\n }, [value, minRows, maxRows, needAutoSize]);\n useLayoutEffect(function () {\n if (resizeState === RESIZE_START) {\n setResizeState(RESIZE_MEASURING);\n } else if (resizeState === RESIZE_MEASURING) {\n var textareaStyles = calculateAutoSizeStyle(textareaRef.current, false, minRows, maxRows); // Safari has bug that text will keep break line on text cut when it's prev is break line.\n // ZombieJ: This not often happen. So we just skip it.\n // const { selectionStart, selectionEnd, scrollTop } = textareaRef.current;\n // const { value: tmpValue } = textareaRef.current;\n // textareaRef.current.value = '';\n // textareaRef.current.value = tmpValue;\n // if (document.activeElement === textareaRef.current) {\n // textareaRef.current.scrollTop = scrollTop;\n // textareaRef.current.setSelectionRange(selectionStart, selectionEnd);\n // }\n\n setResizeState(RESIZE_STABLE);\n setAutoSizeStyle(textareaStyles);\n } else {\n fixFirefoxAutoScroll();\n }\n }, [resizeState]); // We lock resize trigger by raf to avoid Safari warning\n\n var resizeRafRef = React.useRef();\n\n var cleanRaf = function cleanRaf() {\n raf.cancel(resizeRafRef.current);\n };\n\n var onInternalResize = function onInternalResize(size) {\n if (resizeState === RESIZE_STABLE) {\n onResize === null || onResize === void 0 ? void 0 : onResize(size);\n\n if (autoSize) {\n cleanRaf();\n resizeRafRef.current = raf(function () {\n startResize();\n });\n }\n }\n };\n\n React.useEffect(function () {\n return cleanRaf;\n }, []); // =============================== Render ===============================\n\n var mergedAutoSizeStyle = needAutoSize ? autoSizeStyle : null;\n\n var mergedStyle = _objectSpread(_objectSpread({}, style), mergedAutoSizeStyle);\n\n if (resizeState === RESIZE_START || resizeState === RESIZE_MEASURING) {\n mergedStyle.overflowY = 'hidden';\n mergedStyle.overflowX = 'hidden';\n }\n\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: onInternalResize,\n disabled: !(autoSize || onResize)\n }, /*#__PURE__*/React.createElement(\"textarea\", _extends({}, restProps, {\n ref: textareaRef,\n style: mergedStyle,\n className: classNames(prefixCls, className, _defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled)),\n disabled: disabled,\n value: mergedValue,\n onChange: onInternalChange\n })));\n});\nexport default ResizableTextArea;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nvar _excluded = [\"defaultValue\", \"value\", \"onChange\", \"allowClear\", \"maxLength\", \"onCompositionStart\", \"onCompositionEnd\", \"suffix\", \"prefixCls\", \"classes\", \"showCount\", \"className\", \"style\", \"disabled\"];\nimport classNames from 'classnames';\nimport { BaseInput } from 'rc-input';\nimport { fixControlledValue, resolveOnChange } from \"rc-input/es/utils/commonUtils\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport React, { useImperativeHandle, useRef } from 'react';\nimport ResizableTextArea from \"./ResizableTextArea\";\n\nfunction fixEmojiLength(value, maxLength) {\n return _toConsumableArray(value || '').slice(0, maxLength).join('');\n}\n\nfunction setTriggerValue(isCursorInEnd, preValue, triggerValue, maxLength) {\n var newTriggerValue = triggerValue;\n\n if (isCursorInEnd) {\n // 光标在尾部,直接截断\n newTriggerValue = fixEmojiLength(triggerValue, maxLength);\n } else if (_toConsumableArray(preValue || '').length < triggerValue.length && _toConsumableArray(triggerValue || '').length > maxLength) {\n // 光标在中间,如果最后的值超过最大值,则采用原先的值\n newTriggerValue = preValue;\n }\n\n return newTriggerValue;\n}\n\nvar TextArea = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var defaultValue = _ref.defaultValue,\n customValue = _ref.value,\n onChange = _ref.onChange,\n allowClear = _ref.allowClear,\n maxLength = _ref.maxLength,\n onCompositionStart = _ref.onCompositionStart,\n onCompositionEnd = _ref.onCompositionEnd,\n suffix = _ref.suffix,\n _ref$prefixCls = _ref.prefixCls,\n prefixCls = _ref$prefixCls === void 0 ? 'rc-textarea' : _ref$prefixCls,\n classes = _ref.classes,\n showCount = _ref.showCount,\n className = _ref.className,\n style = _ref.style,\n disabled = _ref.disabled,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n var _useMergedState = useMergedState(defaultValue, {\n value: customValue,\n defaultValue: defaultValue\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n\n var resizableTextAreaRef = useRef(null);\n\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n compositing = _React$useState2[0],\n setCompositing = _React$useState2[1];\n\n var oldCompositionValueRef = React.useRef();\n var oldSelectionStartRef = React.useRef(0);\n\n var focus = function focus() {\n resizableTextAreaRef.current.textArea.focus();\n };\n\n useImperativeHandle(ref, function () {\n return {\n resizableTextArea: resizableTextAreaRef.current,\n focus: focus,\n blur: function blur() {\n resizableTextAreaRef.current.textArea.blur();\n }\n };\n }); // =========================== Value Update ===========================\n // Max length value\n\n var hasMaxLength = Number(maxLength) > 0;\n\n var onInternalCompositionStart = function onInternalCompositionStart(e) {\n setCompositing(true); // 拼音输入前保存一份旧值\n\n oldCompositionValueRef.current = value; // 保存旧的光标位置\n\n oldSelectionStartRef.current = e.currentTarget.selectionStart;\n onCompositionStart === null || onCompositionStart === void 0 ? void 0 : onCompositionStart(e);\n };\n\n var onInternalCompositionEnd = function onInternalCompositionEnd(e) {\n setCompositing(false);\n var triggerValue = e.currentTarget.value;\n\n if (hasMaxLength) {\n var _oldCompositionValueR;\n\n var isCursorInEnd = oldSelectionStartRef.current >= maxLength + 1 || oldSelectionStartRef.current === ((_oldCompositionValueR = oldCompositionValueRef.current) === null || _oldCompositionValueR === void 0 ? void 0 : _oldCompositionValueR.length);\n triggerValue = setTriggerValue(isCursorInEnd, oldCompositionValueRef.current, triggerValue, maxLength);\n } // Patch composition onChange when value changed\n\n\n if (triggerValue !== value) {\n setValue(triggerValue);\n resolveOnChange(e.currentTarget, e, onChange, triggerValue);\n }\n\n onCompositionEnd === null || onCompositionEnd === void 0 ? void 0 : onCompositionEnd(e);\n };\n\n var handleChange = function handleChange(e) {\n var triggerValue = e.target.value;\n\n if (!compositing && hasMaxLength) {\n // 1. 复制粘贴超过maxlength的情况 2.未超过maxlength的情况\n var isCursorInEnd = e.target.selectionStart >= maxLength + 1 || e.target.selectionStart === triggerValue.length || !e.target.selectionStart;\n triggerValue = setTriggerValue(isCursorInEnd, value, triggerValue, maxLength);\n }\n\n setValue(triggerValue);\n resolveOnChange(e.currentTarget, e, onChange, triggerValue);\n };\n\n var handleKeyDown = function handleKeyDown(e) {\n var onPressEnter = rest.onPressEnter,\n onKeyDown = rest.onKeyDown;\n\n if (e.key === 'Enter' && onPressEnter) {\n onPressEnter(e);\n }\n\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n }; // ============================== Reset ===============================\n\n\n var handleReset = function handleReset(e) {\n setValue('');\n focus();\n resolveOnChange(resizableTextAreaRef.current.textArea, e, onChange);\n };\n\n var val = fixControlledValue(value);\n\n if (!compositing && hasMaxLength && (customValue === null || customValue === undefined)) {\n // fix #27612 将value转为数组进行截取,解决 '😂'.length === 2 等emoji表情导致的截取乱码的问题\n val = fixEmojiLength(val, maxLength);\n }\n\n var textarea = /*#__PURE__*/React.createElement(BaseInput, {\n value: val,\n allowClear: allowClear,\n handleReset: handleReset,\n suffix: suffix,\n prefixCls: prefixCls,\n classes: {\n affixWrapper: classes === null || classes === void 0 ? void 0 : classes.affixWrapper\n },\n disabled: disabled,\n style: style,\n inputStyle: {\n resize: style === null || style === void 0 ? void 0 : style.resize\n },\n inputElement: /*#__PURE__*/React.createElement(ResizableTextArea, _extends({}, rest, {\n onKeyDown: handleKeyDown,\n onChange: handleChange,\n onCompositionStart: onInternalCompositionStart,\n onCompositionEnd: onInternalCompositionEnd,\n className: classNames(showCount ? '' : className, classes === null || classes === void 0 ? void 0 : classes.textarea),\n style: !showCount && style,\n disabled: disabled,\n prefixCls: prefixCls,\n ref: resizableTextAreaRef\n }))\n });\n\n if (showCount) {\n var valueLength = _toConsumableArray(val).length;\n\n var dataCount;\n\n if (_typeof(showCount) === 'object') {\n dataCount = showCount.formatter({\n value: val,\n count: valueLength,\n maxLength: maxLength\n });\n } else {\n dataCount = \"\".concat(valueLength).concat(hasMaxLength ? \" / \".concat(maxLength) : '');\n }\n\n return /*#__PURE__*/React.createElement(\"div\", {\n hidden: rest.hidden,\n className: classNames(\"\".concat(prefixCls, \"-show-count\"), className, classes === null || classes === void 0 ? void 0 : classes.countWrapper),\n style: style,\n \"data-count\": dataCount\n }, textarea, /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-data-count\")\n }, dataCount));\n }\n\n return textarea;\n});\nexport default TextArea;","import TextArea from \"./TextArea\";\nexport { default as ResizableTextArea } from \"./ResizableTextArea\";\nexport default TextArea;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { forwardRef } from 'react';\nimport * as React from 'react';\nimport RcTextArea from 'rc-textarea';\nimport classNames from 'classnames';\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport { FormItemInputContext } from '../form/context';\nimport useStyle from './style';\nimport SizeContext from '../config-provider/SizeContext';\nimport { getMergedStatus, getStatusClassNames } from '../_util/statusUtils';\nimport { triggerFocus } from './Input';\nimport DisabledContext from '../config-provider/DisabledContext';\nimport { ConfigContext } from '../config-provider';\nconst TextArea = /*#__PURE__*/forwardRef((_a, ref) => {\n var {\n prefixCls: customizePrefixCls,\n bordered = true,\n size: customizeSize,\n disabled: customDisabled,\n status: customStatus,\n allowClear\n } = _a,\n rest = __rest(_a, [\"prefixCls\", \"bordered\", \"size\", \"disabled\", \"status\", \"allowClear\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n // ===================== Size =====================\n const size = React.useContext(SizeContext);\n const mergedSize = customizeSize || size;\n // ===================== Disabled =====================\n const disabled = React.useContext(DisabledContext);\n const mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;\n // ===================== Status =====================\n const {\n status: contextStatus,\n hasFeedback,\n feedbackIcon\n } = React.useContext(FormItemInputContext);\n const mergedStatus = getMergedStatus(contextStatus, customStatus);\n // ===================== Ref =====================\n const innerRef = React.useRef(null);\n React.useImperativeHandle(ref, () => {\n var _a;\n return {\n resizableTextArea: (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea,\n focus: option => {\n var _a, _b;\n triggerFocus((_b = (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea) === null || _b === void 0 ? void 0 : _b.textArea, option);\n },\n blur: () => {\n var _a;\n return (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.blur();\n }\n };\n });\n const prefixCls = getPrefixCls('input', customizePrefixCls);\n // Allow clear\n let mergedAllowClear;\n if (typeof allowClear === 'object' && (allowClear === null || allowClear === void 0 ? void 0 : allowClear.clearIcon)) {\n mergedAllowClear = allowClear;\n } else if (allowClear) {\n mergedAllowClear = {\n clearIcon: /*#__PURE__*/React.createElement(CloseCircleFilled, null)\n };\n }\n // ===================== Style =====================\n const [wrapSSR, hashId] = useStyle(prefixCls);\n return wrapSSR( /*#__PURE__*/React.createElement(RcTextArea, Object.assign({}, rest, {\n disabled: mergedDisabled,\n allowClear: mergedAllowClear,\n classes: {\n affixWrapper: classNames(`${prefixCls}-textarea-affix-wrapper`, {\n [`${prefixCls}-affix-wrapper-rtl`]: direction === 'rtl',\n [`${prefixCls}-affix-wrapper-borderless`]: !bordered,\n [`${prefixCls}-affix-wrapper-sm`]: mergedSize === 'small',\n [`${prefixCls}-affix-wrapper-lg`]: mergedSize === 'large'\n }, getStatusClassNames(`${prefixCls}-affix-wrapper`, mergedStatus), hashId),\n countWrapper: classNames(`${prefixCls}-textarea`, `${prefixCls}-textarea-show-count`, hashId),\n textarea: classNames({\n [`${prefixCls}-borderless`]: !bordered,\n [`${prefixCls}-sm`]: mergedSize === 'small',\n [`${prefixCls}-lg`]: mergedSize === 'large'\n }, getStatusClassNames(prefixCls, mergedStatus), hashId)\n },\n prefixCls: prefixCls,\n suffix: hasFeedback && /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-textarea-suffix`\n }, feedbackIcon),\n ref: innerRef\n })));\n});\nexport default TextArea;","import { useEffect, useRef } from 'react';\nexport default function useRemovePasswordTimeout(inputRef, triggerOnMount) {\n const removePasswordTimeoutRef = useRef([]);\n const removePasswordTimeout = () => {\n removePasswordTimeoutRef.current.push(setTimeout(() => {\n var _a, _b, _c, _d;\n if (((_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.input) && ((_b = inputRef.current) === null || _b === void 0 ? void 0 : _b.input.getAttribute('type')) === 'password' && ((_c = inputRef.current) === null || _c === void 0 ? void 0 : _c.input.hasAttribute('value'))) {\n (_d = inputRef.current) === null || _d === void 0 ? void 0 : _d.input.removeAttribute('value');\n }\n }));\n };\n useEffect(() => {\n if (triggerOnMount) {\n removePasswordTimeout();\n }\n return () => removePasswordTimeoutRef.current.forEach(timer => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n }, []);\n return removePasswordTimeout;\n}","import { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport { clearFix, resetComponent } from '../../style';\nimport { genCompactItemStyle } from '../../style/compact-item';\nexport const genPlaceholderStyle = color => ({\n // Firefox\n '&::-moz-placeholder': {\n opacity: 1\n },\n '&::placeholder': {\n color,\n userSelect: 'none' // https://github.com/ant-design/ant-design/pull/32639\n },\n\n '&:placeholder-shown': {\n textOverflow: 'ellipsis'\n }\n});\nexport const genHoverStyle = token => ({\n borderColor: token.inputBorderHoverColor,\n borderInlineEndWidth: token.lineWidth\n});\nexport const genActiveStyle = token => ({\n borderColor: token.inputBorderHoverColor,\n boxShadow: `0 0 0 ${token.controlOutlineWidth}px ${token.controlOutline}`,\n borderInlineEndWidth: token.lineWidth,\n outline: 0\n});\nexport const genDisabledStyle = token => ({\n color: token.colorTextDisabled,\n backgroundColor: token.colorBgContainerDisabled,\n borderColor: token.colorBorder,\n boxShadow: 'none',\n cursor: 'not-allowed',\n opacity: 1,\n '&:hover': Object.assign({}, genHoverStyle(mergeToken(token, {\n inputBorderHoverColor: token.colorBorder\n })))\n});\nconst genInputLargeStyle = token => {\n const {\n inputPaddingVerticalLG,\n fontSizeLG,\n lineHeightLG,\n borderRadiusLG,\n inputPaddingHorizontalLG\n } = token;\n return {\n padding: `${inputPaddingVerticalLG}px ${inputPaddingHorizontalLG}px`,\n fontSize: fontSizeLG,\n lineHeight: lineHeightLG,\n borderRadius: borderRadiusLG\n };\n};\nexport const genInputSmallStyle = token => ({\n padding: `${token.inputPaddingVerticalSM}px ${token.controlPaddingHorizontalSM - 1}px`,\n borderRadius: token.borderRadiusSM\n});\nexport const genStatusStyle = (token, parentCls) => {\n const {\n componentCls,\n colorError,\n colorWarning,\n colorErrorOutline,\n colorWarningOutline,\n colorErrorBorderHover,\n colorWarningBorderHover\n } = token;\n return {\n [`&-status-error:not(${parentCls}-disabled):not(${parentCls}-borderless)${parentCls}`]: {\n borderColor: colorError,\n '&:hover': {\n borderColor: colorErrorBorderHover\n },\n '&:focus, &-focused': Object.assign({}, genActiveStyle(mergeToken(token, {\n inputBorderActiveColor: colorError,\n inputBorderHoverColor: colorError,\n controlOutline: colorErrorOutline\n }))),\n [`${componentCls}-prefix, ${componentCls}-suffix`]: {\n color: colorError\n }\n },\n [`&-status-warning:not(${parentCls}-disabled):not(${parentCls}-borderless)${parentCls}`]: {\n borderColor: colorWarning,\n '&:hover': {\n borderColor: colorWarningBorderHover\n },\n '&:focus, &-focused': Object.assign({}, genActiveStyle(mergeToken(token, {\n inputBorderActiveColor: colorWarning,\n inputBorderHoverColor: colorWarning,\n controlOutline: colorWarningOutline\n }))),\n [`${componentCls}-prefix, ${componentCls}-suffix`]: {\n color: colorWarning\n }\n }\n };\n};\nexport const genBasicInputStyle = token => Object.assign(Object.assign({\n position: 'relative',\n display: 'inline-block',\n width: '100%',\n minWidth: 0,\n padding: `${token.inputPaddingVertical}px ${token.inputPaddingHorizontal}px`,\n color: token.colorText,\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n backgroundColor: token.colorBgContainer,\n backgroundImage: 'none',\n borderWidth: token.lineWidth,\n borderStyle: token.lineType,\n borderColor: token.colorBorder,\n borderRadius: token.borderRadius,\n transition: `all ${token.motionDurationMid}`\n}, genPlaceholderStyle(token.colorTextPlaceholder)), {\n '&:hover': Object.assign({}, genHoverStyle(token)),\n '&:focus, &-focused': Object.assign({}, genActiveStyle(token)),\n '&-disabled, &[disabled]': Object.assign({}, genDisabledStyle(token)),\n '&-borderless': {\n '&, &:hover, &:focus, &-focused, &-disabled, &[disabled]': {\n backgroundColor: 'transparent',\n border: 'none',\n boxShadow: 'none'\n }\n },\n // Reset height for `textarea`s\n 'textarea&': {\n maxWidth: '100%',\n height: 'auto',\n minHeight: token.controlHeight,\n lineHeight: token.lineHeight,\n verticalAlign: 'bottom',\n transition: `all ${token.motionDurationSlow}, height 0s`,\n resize: 'vertical'\n },\n // Size\n '&-lg': Object.assign({}, genInputLargeStyle(token)),\n '&-sm': Object.assign({}, genInputSmallStyle(token)),\n // RTL\n '&-rtl': {\n direction: 'rtl'\n },\n '&-textarea-rtl': {\n direction: 'rtl'\n }\n});\nexport const genInputGroupStyle = token => {\n const {\n componentCls,\n antCls\n } = token;\n return {\n position: 'relative',\n display: 'table',\n width: '100%',\n borderCollapse: 'separate',\n borderSpacing: 0,\n // Undo padding and float of grid classes\n [`&[class*='col-']`]: {\n paddingInlineEnd: token.paddingXS,\n '&:last-child': {\n paddingInlineEnd: 0\n }\n },\n // Sizing options\n [`&-lg ${componentCls}, &-lg > ${componentCls}-group-addon`]: Object.assign({}, genInputLargeStyle(token)),\n [`&-sm ${componentCls}, &-sm > ${componentCls}-group-addon`]: Object.assign({}, genInputSmallStyle(token)),\n // Fix https://github.com/ant-design/ant-design/issues/5754\n [`&-lg ${antCls}-select-single ${antCls}-select-selector`]: {\n height: token.controlHeightLG\n },\n [`&-sm ${antCls}-select-single ${antCls}-select-selector`]: {\n height: token.controlHeightSM\n },\n [`> ${componentCls}`]: {\n display: 'table-cell',\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0\n }\n },\n [`${componentCls}-group`]: {\n [`&-addon, &-wrap`]: {\n display: 'table-cell',\n width: 1,\n whiteSpace: 'nowrap',\n verticalAlign: 'middle',\n '&:not(:first-child):not(:last-child)': {\n borderRadius: 0\n }\n },\n '&-wrap > *': {\n display: 'block !important'\n },\n '&-addon': {\n position: 'relative',\n padding: `0 ${token.inputPaddingHorizontal}px`,\n color: token.colorText,\n fontWeight: 'normal',\n fontSize: token.fontSize,\n textAlign: 'center',\n backgroundColor: token.colorFillAlter,\n border: `${token.lineWidth}px ${token.lineType} ${token.colorBorder}`,\n borderRadius: token.borderRadius,\n transition: `all ${token.motionDurationSlow}`,\n lineHeight: 1,\n // Reset Select's style in addon\n [`${antCls}-select`]: {\n margin: `-${token.inputPaddingVertical + 1}px -${token.inputPaddingHorizontal}px`,\n [`&${antCls}-select-single:not(${antCls}-select-customize-input)`]: {\n [`${antCls}-select-selector`]: {\n backgroundColor: 'inherit',\n border: `${token.lineWidth}px ${token.lineType} transparent`,\n boxShadow: 'none'\n }\n },\n '&-open, &-focused': {\n [`${antCls}-select-selector`]: {\n color: token.colorPrimary\n }\n }\n },\n // https://github.com/ant-design/ant-design/issues/31333\n [`${antCls}-cascader-picker`]: {\n margin: `-9px -${token.inputPaddingHorizontal}px`,\n backgroundColor: 'transparent',\n [`${antCls}-cascader-input`]: {\n textAlign: 'start',\n border: 0,\n boxShadow: 'none'\n }\n }\n },\n '&-addon:first-child': {\n borderInlineEnd: 0\n },\n '&-addon:last-child': {\n borderInlineStart: 0\n }\n },\n [`${componentCls}`]: {\n width: '100%',\n marginBottom: 0,\n textAlign: 'inherit',\n '&:focus': {\n zIndex: 1,\n borderInlineEndWidth: 1\n },\n '&:hover': {\n zIndex: 1,\n borderInlineEndWidth: 1,\n [`${componentCls}-search-with-button &`]: {\n zIndex: 0\n }\n }\n },\n // Reset rounded corners\n [`> ${componentCls}:first-child, ${componentCls}-group-addon:first-child`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n // Reset Select's style in addon\n [`${antCls}-select ${antCls}-select-selector`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0\n }\n },\n [`> ${componentCls}-affix-wrapper`]: {\n [`&:not(:first-child) ${componentCls}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n },\n [`&:not(:last-child) ${componentCls}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0\n }\n },\n [`> ${componentCls}:last-child, ${componentCls}-group-addon:last-child`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0,\n // Reset Select's style in addon\n [`${antCls}-select ${antCls}-select-selector`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n }\n },\n [`${componentCls}-affix-wrapper`]: {\n '&:not(:last-child)': {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n [`${componentCls}-search &`]: {\n borderStartStartRadius: token.borderRadius,\n borderEndStartRadius: token.borderRadius\n }\n },\n [`&:not(:first-child), ${componentCls}-search &:not(:first-child)`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n }\n },\n [`&${componentCls}-group-compact`]: Object.assign(Object.assign({\n display: 'block'\n }, clearFix()), {\n [`${componentCls}-group-addon, ${componentCls}-group-wrap, > ${componentCls}`]: {\n '&:not(:first-child):not(:last-child)': {\n borderInlineEndWidth: token.lineWidth,\n '&:hover': {\n zIndex: 1\n },\n '&:focus': {\n zIndex: 1\n }\n }\n },\n '& > *': {\n display: 'inline-block',\n float: 'none',\n verticalAlign: 'top',\n borderRadius: 0\n },\n [`& > ${componentCls}-affix-wrapper`]: {\n display: 'inline-flex'\n },\n [`& > ${antCls}-picker-range`]: {\n display: 'inline-flex'\n },\n '& > *:not(:last-child)': {\n marginInlineEnd: -token.lineWidth,\n borderInlineEndWidth: token.lineWidth\n },\n // Undo float for .ant-input-group .ant-input\n [`${componentCls}`]: {\n float: 'none'\n },\n // reset border for Select, DatePicker, AutoComplete, Cascader, Mention, TimePicker, Input\n [`& > ${antCls}-select > ${antCls}-select-selector,\n & > ${antCls}-select-auto-complete ${componentCls},\n & > ${antCls}-cascader-picker ${componentCls},\n & > ${componentCls}-group-wrapper ${componentCls}`]: {\n borderInlineEndWidth: token.lineWidth,\n borderRadius: 0,\n '&:hover': {\n zIndex: 1\n },\n '&:focus': {\n zIndex: 1\n }\n },\n [`& > ${antCls}-select-focused`]: {\n zIndex: 1\n },\n // update z-index for arrow icon\n [`& > ${antCls}-select > ${antCls}-select-arrow`]: {\n zIndex: 1 // https://github.com/ant-design/ant-design/issues/20371\n },\n [`& > *:first-child,\n & > ${antCls}-select:first-child > ${antCls}-select-selector,\n & > ${antCls}-select-auto-complete:first-child ${componentCls},\n & > ${antCls}-cascader-picker:first-child ${componentCls}`]: {\n borderStartStartRadius: token.borderRadius,\n borderEndStartRadius: token.borderRadius\n },\n [`& > *:last-child,\n & > ${antCls}-select:last-child > ${antCls}-select-selector,\n & > ${antCls}-cascader-picker:last-child ${componentCls},\n & > ${antCls}-cascader-picker-focused:last-child ${componentCls}`]: {\n borderInlineEndWidth: token.lineWidth,\n borderStartEndRadius: token.borderRadius,\n borderEndEndRadius: token.borderRadius\n },\n // https://github.com/ant-design/ant-design/issues/12493\n [`& > ${antCls}-select-auto-complete ${componentCls}`]: {\n verticalAlign: 'top'\n },\n [`${componentCls}-group-wrapper + ${componentCls}-group-wrapper`]: {\n marginInlineStart: -token.lineWidth,\n [`${componentCls}-affix-wrapper`]: {\n borderRadius: 0\n }\n },\n [`${componentCls}-group-wrapper:not(:last-child)`]: {\n [`&${componentCls}-search > ${componentCls}-group`]: {\n [`& > ${componentCls}-group-addon > ${componentCls}-search-button`]: {\n borderRadius: 0\n },\n [`& > ${componentCls}`]: {\n borderStartStartRadius: token.borderRadius,\n borderStartEndRadius: 0,\n borderEndEndRadius: 0,\n borderEndStartRadius: token.borderRadius\n }\n }\n }\n })\n };\n};\nconst genInputStyle = token => {\n const {\n componentCls,\n controlHeightSM,\n lineWidth\n } = token;\n const FIXED_CHROME_COLOR_HEIGHT = 16;\n const colorSmallPadding = (controlHeightSM - lineWidth * 2 - FIXED_CHROME_COLOR_HEIGHT) / 2;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genBasicInputStyle(token)), genStatusStyle(token, componentCls)), {\n '&[type=\"color\"]': {\n height: token.controlHeight,\n [`&${componentCls}-lg`]: {\n height: token.controlHeightLG\n },\n [`&${componentCls}-sm`]: {\n height: controlHeightSM,\n paddingTop: colorSmallPadding,\n paddingBottom: colorSmallPadding\n }\n },\n '&[type=\"search\"]::-webkit-search-cancel-button, &[type=\"search\"]::-webkit-search-decoration': {\n '-webkit-appearance': 'none'\n }\n })\n };\n};\nconst genAllowClearStyle = token => {\n const {\n componentCls\n } = token;\n return {\n // ========================= Input =========================\n [`${componentCls}-clear-icon`]: {\n margin: 0,\n color: token.colorTextQuaternary,\n fontSize: token.fontSizeIcon,\n verticalAlign: -1,\n // https://github.com/ant-design/ant-design/pull/18151\n // https://codesandbox.io/s/wizardly-sun-u10br\n cursor: 'pointer',\n transition: `color ${token.motionDurationSlow}`,\n '&:hover': {\n color: token.colorTextTertiary\n },\n '&:active': {\n color: token.colorText\n },\n '&-hidden': {\n visibility: 'hidden'\n },\n '&-has-suffix': {\n margin: `0 ${token.inputAffixPadding}px`\n }\n }\n };\n};\nconst genAffixStyle = token => {\n const {\n componentCls,\n inputAffixPadding,\n colorTextDescription,\n motionDurationSlow,\n colorIcon,\n colorIconHover,\n iconCls\n } = token;\n return {\n [`${componentCls}-affix-wrapper`]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, genBasicInputStyle(token)), {\n display: 'inline-flex',\n [`&:not(${componentCls}-affix-wrapper-disabled):hover`]: Object.assign(Object.assign({}, genHoverStyle(token)), {\n zIndex: 1,\n [`${componentCls}-search-with-button &`]: {\n zIndex: 0\n }\n }),\n '&-focused, &:focus': {\n zIndex: 1\n },\n '&-disabled': {\n [`${componentCls}[disabled]`]: {\n background: 'transparent'\n }\n },\n [`> input${componentCls}`]: {\n padding: 0,\n fontSize: 'inherit',\n border: 'none',\n borderRadius: 0,\n outline: 'none',\n '&:focus': {\n boxShadow: 'none !important'\n }\n },\n '&::before': {\n width: 0,\n visibility: 'hidden',\n content: '\"\\\\a0\"'\n },\n [`${componentCls}`]: {\n '&-prefix, &-suffix': {\n display: 'flex',\n flex: 'none',\n alignItems: 'center',\n '> *:not(:last-child)': {\n marginInlineEnd: token.paddingXS\n }\n },\n '&-show-count-suffix': {\n color: colorTextDescription\n },\n '&-show-count-has-suffix': {\n marginInlineEnd: token.paddingXXS\n },\n '&-prefix': {\n marginInlineEnd: inputAffixPadding\n },\n '&-suffix': {\n marginInlineStart: inputAffixPadding\n }\n }\n }), genAllowClearStyle(token)), {\n // password\n [`${iconCls}${componentCls}-password-icon`]: {\n color: colorIcon,\n cursor: 'pointer',\n transition: `all ${motionDurationSlow}`,\n '&:hover': {\n color: colorIconHover\n }\n }\n }), genStatusStyle(token, `${componentCls}-affix-wrapper`))\n };\n};\nconst genGroupStyle = token => {\n const {\n componentCls,\n colorError,\n colorSuccess,\n borderRadiusLG,\n borderRadiusSM\n } = token;\n return {\n [`${componentCls}-group`]: Object.assign(Object.assign(Object.assign({}, resetComponent(token)), genInputGroupStyle(token)), {\n '&-rtl': {\n direction: 'rtl'\n },\n '&-wrapper': {\n display: 'inline-block',\n width: '100%',\n textAlign: 'start',\n verticalAlign: 'top',\n '&-rtl': {\n direction: 'rtl'\n },\n // Size\n '&-lg': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusLG\n }\n },\n '&-sm': {\n [`${componentCls}-group-addon`]: {\n borderRadius: borderRadiusSM\n }\n },\n // Status\n '&-status-error': {\n [`${componentCls}-group-addon`]: {\n color: colorError,\n borderColor: colorError\n }\n },\n '&-status-warning': {\n [`${componentCls}-group-addon:last-child`]: {\n color: colorSuccess,\n borderColor: colorSuccess\n }\n }\n }\n })\n };\n};\nconst genSearchInputStyle = token => {\n const {\n componentCls,\n antCls\n } = token;\n const searchPrefixCls = `${componentCls}-search`;\n return {\n [searchPrefixCls]: {\n [`${componentCls}`]: {\n '&:hover, &:focus': {\n borderColor: token.colorPrimaryHover,\n [`+ ${componentCls}-group-addon ${searchPrefixCls}-button:not(${antCls}-btn-primary)`]: {\n borderInlineStartColor: token.colorPrimaryHover\n }\n }\n },\n [`${componentCls}-affix-wrapper`]: {\n borderRadius: 0\n },\n // fix slight height diff in Firefox:\n // https://ant.design/components/auto-complete-cn/#components-auto-complete-demo-certain-category\n [`${componentCls}-lg`]: {\n lineHeight: token.lineHeightLG - 0.0002\n },\n [`> ${componentCls}-group`]: {\n [`> ${componentCls}-group-addon:last-child`]: {\n insetInlineStart: -1,\n padding: 0,\n border: 0,\n [`${searchPrefixCls}-button`]: {\n paddingTop: 0,\n paddingBottom: 0,\n borderStartStartRadius: 0,\n borderStartEndRadius: token.borderRadius,\n borderEndEndRadius: token.borderRadius,\n borderEndStartRadius: 0\n },\n [`${searchPrefixCls}-button:not(${antCls}-btn-primary)`]: {\n color: token.colorTextDescription,\n '&:hover': {\n color: token.colorPrimaryHover\n },\n '&:active': {\n color: token.colorPrimaryActive\n },\n [`&${antCls}-btn-loading::before`]: {\n insetInlineStart: 0,\n insetInlineEnd: 0,\n insetBlockStart: 0,\n insetBlockEnd: 0\n }\n }\n }\n },\n [`${searchPrefixCls}-button`]: {\n height: token.controlHeight,\n '&:hover, &:focus': {\n zIndex: 1\n }\n },\n [`&-large ${searchPrefixCls}-button`]: {\n height: token.controlHeightLG\n },\n [`&-small ${searchPrefixCls}-button`]: {\n height: token.controlHeightSM\n },\n '&-rtl': {\n direction: 'rtl'\n },\n // ===================== Compact Item Customized Styles =====================\n [`&${componentCls}-compact-item`]: {\n [`&:not(${componentCls}-compact-last-item)`]: {\n [`${componentCls}-group-addon`]: {\n [`${componentCls}-search-button`]: {\n marginInlineEnd: -token.lineWidth,\n borderRadius: 0\n }\n }\n },\n [`&:not(${componentCls}-compact-first-item)`]: {\n [`${componentCls},${componentCls}-affix-wrapper`]: {\n borderRadius: 0\n }\n },\n [`> ${componentCls}-group-addon ${componentCls}-search-button,\n > ${componentCls},\n ${componentCls}-affix-wrapper`]: {\n '&:hover,&:focus,&:active': {\n zIndex: 2\n }\n },\n [`> ${componentCls}-affix-wrapper-focused`]: {\n zIndex: 2\n }\n }\n }\n };\n};\nexport function initInputToken(token) {\n // @ts-ignore\n return mergeToken(token, {\n inputAffixPadding: token.paddingXXS,\n inputPaddingVertical: Math.max(Math.round((token.controlHeight - token.fontSize * token.lineHeight) / 2 * 10) / 10 - token.lineWidth, 3),\n inputPaddingVerticalLG: Math.ceil((token.controlHeightLG - token.fontSizeLG * token.lineHeightLG) / 2 * 10) / 10 - token.lineWidth,\n inputPaddingVerticalSM: Math.max(Math.round((token.controlHeightSM - token.fontSize * token.lineHeight) / 2 * 10) / 10 - token.lineWidth, 0),\n inputPaddingHorizontal: token.paddingSM - token.lineWidth,\n inputPaddingHorizontalSM: token.paddingXS - token.lineWidth,\n inputPaddingHorizontalLG: token.controlPaddingHorizontal - token.lineWidth,\n inputBorderHoverColor: token.colorPrimaryHover,\n inputBorderActiveColor: token.colorPrimaryHover\n });\n}\nconst genTextAreaStyle = token => {\n const {\n componentCls,\n paddingLG\n } = token;\n const textareaPrefixCls = `${componentCls}-textarea`;\n return {\n [textareaPrefixCls]: {\n position: 'relative',\n '&-show-count': {\n // https://github.com/ant-design/ant-design/issues/33049\n [`> ${componentCls}`]: {\n height: '100%'\n },\n [`${componentCls}-data-count`]: {\n color: token.colorTextDescription,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n float: 'right',\n marginBottom: -token.fontSize * token.lineHeight\n },\n '&-rtl': {\n [`${componentCls}-data-count`]: {\n float: 'left'\n }\n }\n },\n [`&-affix-wrapper${textareaPrefixCls}-has-feedback`]: {\n [`${componentCls}`]: {\n paddingInlineEnd: paddingLG\n }\n },\n [`&-affix-wrapper${componentCls}-affix-wrapper`]: {\n padding: 0,\n [`> textarea${componentCls}`]: {\n fontSize: 'inherit',\n border: 'none',\n outline: 'none',\n '&:focus': {\n boxShadow: 'none !important'\n }\n },\n [`${componentCls}-suffix`]: {\n margin: 0,\n '> *:not(:last-child)': {\n marginInline: 0\n },\n // Clear Icon\n [`${componentCls}-clear-icon`]: {\n position: 'absolute',\n insetInlineEnd: token.paddingXS,\n insetBlockStart: token.paddingXS\n },\n // Feedback Icon\n [`${textareaPrefixCls}-suffix`]: {\n position: 'absolute',\n top: 0,\n insetInlineEnd: token.inputPaddingHorizontal,\n bottom: 0,\n zIndex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n margin: 'auto',\n pointerEvents: 'none'\n }\n }\n }\n }\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Input', token => {\n const inputToken = initInputToken(token);\n return [genInputStyle(inputToken), genTextAreaStyle(inputToken), genAffixStyle(inputToken), genGroupStyle(inputToken), genSearchInputStyle(inputToken),\n // =====================================================\n // == Space Compact ==\n // =====================================================\n genCompactItemStyle(inputToken)];\n});","import * as React from 'react';\nimport LocaleContext from './context';\nimport defaultLocaleData from './en_US';\nconst LocaleReceiver = props => {\n const {\n componentName = 'global',\n defaultLocale,\n children\n } = props;\n const antLocale = React.useContext(LocaleContext);\n const getLocale = React.useMemo(() => {\n var _a;\n const locale = defaultLocale || defaultLocaleData[componentName];\n const localeFromContext = (_a = antLocale === null || antLocale === void 0 ? void 0 : antLocale[componentName]) !== null && _a !== void 0 ? _a : {};\n return Object.assign(Object.assign({}, locale instanceof Function ? locale() : locale), localeFromContext || {});\n }, [componentName, defaultLocale, antLocale]);\n const getLocaleCode = React.useMemo(() => {\n const localeCode = antLocale && antLocale.locale;\n // Had use LocaleProvide but didn't set locale\n if (antLocale && antLocale.exist && !localeCode) {\n return defaultLocaleData.locale;\n }\n return localeCode;\n }, [antLocale]);\n return children(getLocale, getLocaleCode, antLocale);\n};\nexport default LocaleReceiver;\nexport const useLocaleReceiver = (componentName, defaultLocale) => {\n const antLocale = React.useContext(LocaleContext);\n const getLocale = React.useMemo(() => {\n var _a;\n const locale = defaultLocale || defaultLocaleData[componentName];\n const localeFromContext = (_a = antLocale === null || antLocale === void 0 ? void 0 : antLocale[componentName]) !== null && _a !== void 0 ? _a : {};\n return Object.assign(Object.assign({}, typeof locale === 'function' ? locale() : locale), localeFromContext || {});\n }, [componentName, defaultLocale, antLocale]);\n return [getLocale];\n};","import { createContext } from 'react';\nconst LocaleContext = /*#__PURE__*/createContext(undefined);\nexport default LocaleContext;","import enUS from '../../date-picker/locale/en_US';\nexport default enUS;","/* eslint-disable no-template-curly-in-string */\nimport Pagination from \"rc-pagination/es/locale/en_US\";\nimport Calendar from '../calendar/locale/en_US';\nimport DatePicker from '../date-picker/locale/en_US';\nimport TimePicker from '../time-picker/locale/en_US';\nconst typeTemplate = '${label} is not a valid ${type}';\nconst localeValues = {\n locale: 'en',\n Pagination,\n DatePicker,\n TimePicker,\n Calendar,\n global: {\n placeholder: 'Please select'\n },\n Table: {\n filterTitle: 'Filter menu',\n filterConfirm: 'OK',\n filterReset: 'Reset',\n filterEmptyText: 'No filters',\n filterCheckall: 'Select all items',\n filterSearchPlaceholder: 'Search in filters',\n emptyText: 'No data',\n selectAll: 'Select current page',\n selectInvert: 'Invert current page',\n selectNone: 'Clear all data',\n selectionAll: 'Select all data',\n sortTitle: 'Sort',\n expand: 'Expand row',\n collapse: 'Collapse row',\n triggerDesc: 'Click to sort descending',\n triggerAsc: 'Click to sort ascending',\n cancelSort: 'Click to cancel sorting'\n },\n Tour: {\n Next: 'Next',\n Previous: 'Previous',\n Finish: 'Finish'\n },\n Modal: {\n okText: 'OK',\n cancelText: 'Cancel',\n justOkText: 'OK'\n },\n Popconfirm: {\n okText: 'OK',\n cancelText: 'Cancel'\n },\n Transfer: {\n titles: ['', ''],\n searchPlaceholder: 'Search here',\n itemUnit: 'item',\n itemsUnit: 'items',\n remove: 'Remove',\n selectCurrent: 'Select current page',\n removeCurrent: 'Remove current page',\n selectAll: 'Select all data',\n removeAll: 'Remove all data',\n selectInvert: 'Invert current page'\n },\n Upload: {\n uploading: 'Uploading...',\n removeFile: 'Remove file',\n uploadError: 'Upload error',\n previewFile: 'Preview file',\n downloadFile: 'Download file'\n },\n Empty: {\n description: 'No data'\n },\n Icon: {\n icon: 'icon'\n },\n Text: {\n edit: 'Edit',\n copy: 'Copy',\n copied: 'Copied',\n expand: 'Expand'\n },\n PageHeader: {\n back: 'Back'\n },\n Form: {\n optional: '(optional)',\n defaultValidateMessages: {\n default: 'Field validation error for ${label}',\n required: 'Please enter ${label}',\n enum: '${label} must be one of [${enum}]',\n whitespace: '${label} cannot be a blank character',\n date: {\n format: '${label} date format is invalid',\n parse: '${label} cannot be converted to a date',\n invalid: '${label} is an invalid date'\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n boolean: typeTemplate,\n integer: typeTemplate,\n float: typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate\n },\n string: {\n len: '${label} must be ${len} characters',\n min: '${label} must be at least ${min} characters',\n max: '${label} must be up to ${max} characters',\n range: '${label} must be between ${min}-${max} characters'\n },\n number: {\n len: '${label} must be equal to ${len}',\n min: '${label} must be minimum ${min}',\n max: '${label} must be maximum ${max}',\n range: '${label} must be between ${min}-${max}'\n },\n array: {\n len: 'Must be ${len} ${label}',\n min: 'At least ${min} ${label}',\n max: 'At most ${max} ${label}',\n range: 'The amount of ${label} must be between ${min}-${max}'\n },\n pattern: {\n mismatch: '${label} does not match the pattern ${pattern}'\n }\n }\n },\n Image: {\n preview: 'Preview'\n },\n QRCode: {\n expired: 'QR code expired',\n refresh: 'Refresh'\n }\n};\nexport default localeValues;","export default {\n // Options.jsx\n items_per_page: '/ page',\n jump_to: 'Go to',\n jump_to_confirm: 'confirm',\n page: 'Page',\n // Pagination.jsx\n prev_page: 'Previous Page',\n next_page: 'Next Page',\n prev_5: 'Previous 5 Pages',\n next_5: 'Next 5 Pages',\n prev_3: 'Previous 3 Pages',\n next_3: 'Next 3 Pages',\n page_size: 'Page Size'\n};","import defaultLocale from '../locale/en_US';\nlet runtimeLocale = Object.assign({}, defaultLocale.Modal);\nexport function changeConfirmLocale(newLocale) {\n if (newLocale) {\n runtimeLocale = Object.assign(Object.assign({}, runtimeLocale), newLocale);\n } else {\n runtimeLocale = Object.assign({}, defaultLocale.Modal);\n }\n}\nexport function getConfirmLocale() {\n return runtimeLocale;\n}","import { initFadeMotion, initZoomMotion } from '../../style/motion';\nimport { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport { clearFix, genFocusStyle, resetComponent } from '../../style';\nfunction box(position) {\n return {\n position,\n top: 0,\n insetInlineEnd: 0,\n bottom: 0,\n insetInlineStart: 0\n };\n}\nexport const genModalMaskStyle = token => {\n const {\n componentCls\n } = token;\n return [{\n [`${componentCls}-root`]: {\n [`${componentCls}${token.antCls}-zoom-enter, ${componentCls}${token.antCls}-zoom-appear`]: {\n // reset scale avoid mousePosition bug\n transform: 'none',\n opacity: 0,\n animationDuration: token.motionDurationSlow,\n // https://github.com/ant-design/ant-design/issues/11777\n userSelect: 'none'\n },\n [`${componentCls}-mask`]: Object.assign(Object.assign({}, box('fixed')), {\n zIndex: token.zIndexPopupBase,\n height: '100%',\n backgroundColor: token.colorBgMask,\n [`${componentCls}-hidden`]: {\n display: 'none'\n }\n }),\n [`${componentCls}-wrap`]: Object.assign(Object.assign({}, box('fixed')), {\n overflow: 'auto',\n outline: 0,\n WebkitOverflowScrolling: 'touch'\n })\n }\n }, {\n [`${componentCls}-root`]: initFadeMotion(token)\n }];\n};\nconst genModalStyle = token => {\n const {\n componentCls\n } = token;\n return [\n // ======================== Root =========================\n {\n [`${componentCls}-root`]: {\n [`${componentCls}-wrap`]: {\n zIndex: token.zIndexPopupBase,\n position: 'fixed',\n inset: 0,\n overflow: 'auto',\n outline: 0,\n WebkitOverflowScrolling: 'touch'\n },\n [`${componentCls}-wrap-rtl`]: {\n direction: 'rtl'\n },\n [`${componentCls}-centered`]: {\n textAlign: 'center',\n '&::before': {\n display: 'inline-block',\n width: 0,\n height: '100%',\n verticalAlign: 'middle',\n content: '\"\"'\n },\n [componentCls]: {\n top: 0,\n display: 'inline-block',\n paddingBottom: 0,\n textAlign: 'start',\n verticalAlign: 'middle'\n }\n },\n [`@media (max-width: ${token.screenSMMax})`]: {\n [componentCls]: {\n maxWidth: 'calc(100vw - 16px)',\n margin: `${token.marginXS} auto`\n },\n [`${componentCls}-centered`]: {\n [componentCls]: {\n flex: 1\n }\n }\n }\n }\n },\n // ======================== Modal ========================\n {\n [componentCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n pointerEvents: 'none',\n position: 'relative',\n top: 100,\n width: 'auto',\n maxWidth: `calc(100vw - ${token.margin * 2}px)`,\n margin: '0 auto',\n paddingBottom: token.paddingLG,\n [`${componentCls}-title`]: {\n margin: 0,\n color: token.modalHeadingColor,\n fontWeight: token.fontWeightStrong,\n fontSize: token.modalHeaderTitleFontSize,\n lineHeight: token.modalHeaderTitleLineHeight,\n wordWrap: 'break-word'\n },\n [`${componentCls}-content`]: {\n position: 'relative',\n backgroundColor: token.modalContentBg,\n backgroundClip: 'padding-box',\n border: 0,\n borderRadius: token.borderRadiusLG,\n boxShadow: token.boxShadow,\n pointerEvents: 'auto',\n padding: `${token.paddingMD}px ${token.paddingContentHorizontalLG}px`\n },\n [`${componentCls}-close`]: Object.assign({\n position: 'absolute',\n top: (token.modalHeaderCloseSize - token.modalCloseBtnSize) / 2,\n insetInlineEnd: (token.modalHeaderCloseSize - token.modalCloseBtnSize) / 2,\n zIndex: token.zIndexPopupBase + 10,\n padding: 0,\n color: token.modalCloseColor,\n fontWeight: token.fontWeightStrong,\n lineHeight: 1,\n textDecoration: 'none',\n background: 'transparent',\n borderRadius: token.borderRadiusSM,\n width: token.modalConfirmIconSize,\n height: token.modalConfirmIconSize,\n border: 0,\n outline: 0,\n cursor: 'pointer',\n transition: `color ${token.motionDurationMid}, background-color ${token.motionDurationMid}`,\n '&-x': {\n display: 'block',\n fontSize: token.fontSizeLG,\n fontStyle: 'normal',\n lineHeight: `${token.modalCloseBtnSize}px`,\n textAlign: 'center',\n textTransform: 'none',\n textRendering: 'auto'\n },\n '&:hover': {\n color: token.modalIconHoverColor,\n backgroundColor: token.wireframe ? 'transparent' : token.colorFillContent,\n textDecoration: 'none'\n },\n '&:active': {\n backgroundColor: token.wireframe ? 'transparent' : token.colorFillContentHover\n }\n }, genFocusStyle(token)),\n [`${componentCls}-header`]: {\n color: token.colorText,\n background: token.modalHeaderBg,\n borderRadius: `${token.borderRadiusLG}px ${token.borderRadiusLG}px 0 0`,\n marginBottom: token.marginXS\n },\n [`${componentCls}-body`]: {\n fontSize: token.fontSize,\n lineHeight: token.lineHeight,\n wordWrap: 'break-word'\n },\n [`${componentCls}-footer`]: {\n textAlign: 'end',\n background: token.modalFooterBg,\n marginTop: token.marginSM,\n [`${token.antCls}-btn + ${token.antCls}-btn:not(${token.antCls}-dropdown-trigger)`]: {\n marginBottom: 0,\n marginInlineStart: token.marginXS\n }\n },\n [`${componentCls}-open`]: {\n overflow: 'hidden'\n }\n })\n },\n // ======================== Pure =========================\n {\n [`${componentCls}-pure-panel`]: {\n top: 'auto',\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n [`${componentCls}-content,\n ${componentCls}-body,\n ${componentCls}-confirm-body-wrapper`]: {\n display: 'flex',\n flexDirection: 'column',\n flex: 'auto'\n },\n [`${componentCls}-confirm-body`]: {\n marginBottom: 'auto'\n }\n }\n }];\n};\nconst genModalConfirmStyle = token => {\n const {\n componentCls\n } = token;\n const confirmComponentCls = `${componentCls}-confirm`;\n return {\n [confirmComponentCls]: {\n '&-rtl': {\n direction: 'rtl'\n },\n [`${token.antCls}-modal-header`]: {\n display: 'none'\n },\n [`${confirmComponentCls}-body-wrapper`]: Object.assign({}, clearFix()),\n [`${confirmComponentCls}-body`]: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n [`${confirmComponentCls}-title`]: {\n flex: '0 0 100%',\n display: 'block',\n // create BFC to avoid\n // https://user-images.githubusercontent.com/507615/37702510-ba844e06-2d2d-11e8-9b67-8e19be57f445.png\n overflow: 'hidden',\n color: token.colorTextHeading,\n fontWeight: token.fontWeightStrong,\n fontSize: token.modalHeaderTitleFontSize,\n lineHeight: token.modalHeaderTitleLineHeight,\n [`+ ${confirmComponentCls}-content`]: {\n marginBlockStart: token.marginXS,\n flexBasis: '100%',\n maxWidth: `calc(100% - ${token.modalConfirmIconSize + token.marginSM}px)`\n }\n },\n [`${confirmComponentCls}-content`]: {\n color: token.colorText,\n fontSize: token.fontSize\n },\n [`> ${token.iconCls}`]: {\n flex: 'none',\n marginInlineEnd: token.marginSM,\n fontSize: token.modalConfirmIconSize,\n [`+ ${confirmComponentCls}-title`]: {\n flex: 1\n },\n // `content` after `icon` should set marginLeft\n [`+ ${confirmComponentCls}-title + ${confirmComponentCls}-content`]: {\n marginInlineStart: token.modalConfirmIconSize + token.marginSM\n }\n }\n },\n [`${confirmComponentCls}-btns`]: {\n textAlign: 'end',\n marginTop: token.marginSM,\n [`${token.antCls}-btn + ${token.antCls}-btn`]: {\n marginBottom: 0,\n marginInlineStart: token.marginXS\n }\n }\n },\n [`${confirmComponentCls}-error ${confirmComponentCls}-body > ${token.iconCls}`]: {\n color: token.colorError\n },\n [`${confirmComponentCls}-warning ${confirmComponentCls}-body > ${token.iconCls},\n ${confirmComponentCls}-confirm ${confirmComponentCls}-body > ${token.iconCls}`]: {\n color: token.colorWarning\n },\n [`${confirmComponentCls}-info ${confirmComponentCls}-body > ${token.iconCls}`]: {\n color: token.colorInfo\n },\n [`${confirmComponentCls}-success ${confirmComponentCls}-body > ${token.iconCls}`]: {\n color: token.colorSuccess\n },\n // https://github.com/ant-design/ant-design/issues/37329\n [`${componentCls}-zoom-leave ${componentCls}-btns`]: {\n pointerEvents: 'none'\n }\n };\n};\nconst genRTLStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [`${componentCls}-root`]: {\n [`${componentCls}-wrap-rtl`]: {\n direction: 'rtl',\n [`${componentCls}-confirm-body`]: {\n direction: 'rtl'\n }\n }\n }\n };\n};\nconst genWireframeStyle = token => {\n const {\n componentCls,\n antCls\n } = token;\n const confirmComponentCls = `${componentCls}-confirm`;\n return {\n [componentCls]: {\n [`${componentCls}-content`]: {\n padding: 0\n },\n [`${componentCls}-header`]: {\n padding: token.modalHeaderPadding,\n borderBottom: `${token.modalHeaderBorderWidth}px ${token.modalHeaderBorderStyle} ${token.modalHeaderBorderColorSplit}`,\n marginBottom: 0\n },\n [`${componentCls}-body`]: {\n padding: token.modalBodyPadding\n },\n [`${componentCls}-footer`]: {\n padding: `${token.modalFooterPaddingVertical}px ${token.modalFooterPaddingHorizontal}px`,\n borderTop: `${token.modalFooterBorderWidth}px ${token.modalFooterBorderStyle} ${token.modalFooterBorderColorSplit}`,\n borderRadius: `0 0 ${token.borderRadiusLG}px ${token.borderRadiusLG}px`,\n marginTop: 0\n }\n },\n [confirmComponentCls]: {\n [`${antCls}-modal-body`]: {\n padding: `${token.padding * 2}px ${token.padding * 2}px ${token.paddingLG}px`\n },\n [`${confirmComponentCls}-body`]: {\n [`> ${token.iconCls}`]: {\n marginInlineEnd: token.margin,\n // `content` after `icon` should set marginLeft\n [`+ ${confirmComponentCls}-title + ${confirmComponentCls}-content`]: {\n marginInlineStart: token.modalConfirmIconSize + token.margin\n }\n }\n },\n [`${confirmComponentCls}-btns`]: {\n marginTop: token.marginLG\n }\n }\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Modal', token => {\n const headerPaddingVertical = token.padding;\n const headerFontSize = token.fontSizeHeading5;\n const headerLineHeight = token.lineHeightHeading5;\n const modalToken = mergeToken(token, {\n modalBodyPadding: token.paddingLG,\n modalHeaderBg: token.colorBgElevated,\n modalHeaderPadding: `${headerPaddingVertical}px ${token.paddingLG}px`,\n modalHeaderBorderWidth: token.lineWidth,\n modalHeaderBorderStyle: token.lineType,\n modalHeaderTitleLineHeight: headerLineHeight,\n modalHeaderTitleFontSize: headerFontSize,\n modalHeaderBorderColorSplit: token.colorSplit,\n modalHeaderCloseSize: headerLineHeight * headerFontSize + headerPaddingVertical * 2,\n modalContentBg: token.colorBgElevated,\n modalHeadingColor: token.colorTextHeading,\n modalCloseColor: token.colorTextDescription,\n modalFooterBg: 'transparent',\n modalFooterBorderColorSplit: token.colorSplit,\n modalFooterBorderStyle: token.lineType,\n modalFooterPaddingVertical: token.paddingXS,\n modalFooterPaddingHorizontal: token.padding,\n modalFooterBorderWidth: token.lineWidth,\n modalConfirmTitleFontSize: token.fontSizeLG,\n modalIconHoverColor: token.colorIconHover,\n modalConfirmIconSize: token.fontSize * token.lineHeight,\n modalCloseBtnSize: token.controlHeightLG * 0.55\n });\n return [genModalStyle(modalToken), genModalConfirmStyle(modalToken), genRTLStyle(modalToken), genModalMaskStyle(modalToken), token.wireframe && genWireframeStyle(modalToken), initZoomMotion(modalToken, 'zoom')];\n});","import { useRef, useEffect } from 'react';\nexport var defaultProps = {\n className: '',\n percent: 0,\n prefixCls: 'rc-progress',\n strokeColor: '#2db7f5',\n strokeLinecap: 'round',\n strokeWidth: 1,\n style: {},\n trailColor: '#D9D9D9',\n trailWidth: 1,\n gapPosition: 'bottom'\n};\nexport var useTransitionDuration = function useTransitionDuration() {\n var pathsRef = useRef([]);\n var prevTimeStamp = useRef(null);\n useEffect(function () {\n var now = Date.now();\n var updated = false;\n pathsRef.current.forEach(function (path) {\n if (!path) {\n return;\n }\n updated = true;\n var pathStyle = path.style;\n pathStyle.transitionDuration = '.3s, .3s, .3s, .06s';\n if (prevTimeStamp.current && now - prevTimeStamp.current < 100) {\n pathStyle.transitionDuration = '0s, 0s';\n }\n });\n if (updated) {\n prevTimeStamp.current = Date.now();\n }\n });\n return pathsRef.current;\n};","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"percent\", \"prefixCls\", \"strokeColor\", \"strokeLinecap\", \"strokeWidth\", \"style\", \"trailColor\", \"trailWidth\", \"transition\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useTransitionDuration, defaultProps } from './common';\nvar Line = function Line(_ref) {\n var className = _ref.className,\n percent = _ref.percent,\n prefixCls = _ref.prefixCls,\n strokeColor = _ref.strokeColor,\n strokeLinecap = _ref.strokeLinecap,\n strokeWidth = _ref.strokeWidth,\n style = _ref.style,\n trailColor = _ref.trailColor,\n trailWidth = _ref.trailWidth,\n transition = _ref.transition,\n restProps = _objectWithoutProperties(_ref, _excluded);\n // eslint-disable-next-line no-param-reassign\n delete restProps.gapPosition;\n var percentList = Array.isArray(percent) ? percent : [percent];\n var strokeColorList = Array.isArray(strokeColor) ? strokeColor : [strokeColor];\n var paths = useTransitionDuration();\n var center = strokeWidth / 2;\n var right = 100 - strokeWidth / 2;\n var pathString = \"M \".concat(strokeLinecap === 'round' ? center : 0, \",\").concat(center, \"\\n L \").concat(strokeLinecap === 'round' ? right : 100, \",\").concat(center);\n var viewBoxString = \"0 0 100 \".concat(strokeWidth);\n var stackPtg = 0;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: classNames(\"\".concat(prefixCls, \"-line\"), className),\n viewBox: viewBoxString,\n preserveAspectRatio: \"none\",\n style: style\n }, restProps), /*#__PURE__*/React.createElement(\"path\", {\n className: \"\".concat(prefixCls, \"-line-trail\"),\n d: pathString,\n strokeLinecap: strokeLinecap,\n stroke: trailColor,\n strokeWidth: trailWidth || strokeWidth,\n fillOpacity: \"0\"\n }), percentList.map(function (ptg, index) {\n var dashPercent = 1;\n switch (strokeLinecap) {\n case 'round':\n dashPercent = 1 - strokeWidth / 100;\n break;\n case 'square':\n dashPercent = 1 - strokeWidth / 2 / 100;\n break;\n default:\n dashPercent = 1;\n break;\n }\n var pathStyle = {\n strokeDasharray: \"\".concat(ptg * dashPercent, \"px, 100px\"),\n strokeDashoffset: \"-\".concat(stackPtg, \"px\"),\n transition: transition || 'stroke-dashoffset 0.3s ease 0s, stroke-dasharray .3s ease 0s, stroke 0.3s linear'\n };\n var color = strokeColorList[index] || strokeColorList[strokeColorList.length - 1];\n stackPtg += ptg;\n return /*#__PURE__*/React.createElement(\"path\", {\n key: index,\n className: \"\".concat(prefixCls, \"-line-path\"),\n d: pathString,\n strokeLinecap: strokeLinecap,\n stroke: color,\n strokeWidth: strokeWidth,\n fillOpacity: \"0\",\n ref: function ref(elem) {\n // https://reactjs.org/docs/refs-and-the-dom.html#callback-refs\n // React will call the ref callback with the DOM element when the component mounts,\n // and call it with `null` when it unmounts.\n // Refs are guaranteed to be up-to-date before componentDidMount or componentDidUpdate fires.\n paths[index] = elem;\n },\n style: pathStyle\n });\n }));\n};\nLine.defaultProps = defaultProps;\nLine.displayName = 'Line';\nexport default Line;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nvar uuid = 0;\n/** Is client side and not jsdom */\nexport var isBrowserClient = process.env.NODE_ENV !== 'test' && canUseDom();\n/** Get unique id for accessibility usage */\nfunction getUUID() {\n var retId;\n // Test never reach\n /* istanbul ignore if */\n if (isBrowserClient) {\n retId = uuid;\n uuid += 1;\n } else {\n retId = 'TEST_OR_SSR';\n }\n return retId;\n}\nexport default (function (id) {\n // Inner id for accessibility usage. Only work in client side\n var _React$useState = React.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerId = _React$useState2[0],\n setInnerId = _React$useState2[1];\n React.useEffect(function () {\n setInnerId(\"rc_progress_\".concat(getUUID()));\n }, []);\n return id || innerId;\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"id\", \"prefixCls\", \"steps\", \"strokeWidth\", \"trailWidth\", \"gapDegree\", \"gapPosition\", \"trailColor\", \"strokeLinecap\", \"style\", \"className\", \"strokeColor\", \"percent\"];\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { defaultProps, useTransitionDuration } from './common';\nimport useId from './hooks/useId';\nfunction stripPercentToNumber(percent) {\n return +percent.replace('%', '');\n}\nfunction toArray(value) {\n var mergedValue = value !== null && value !== void 0 ? value : [];\n return Array.isArray(mergedValue) ? mergedValue : [mergedValue];\n}\nvar VIEW_BOX_SIZE = 100;\nvar getCircleStyle = function getCircleStyle(perimeter, perimeterWithoutGap, offset, percent, rotateDeg, gapDegree, gapPosition, strokeColor, strokeLinecap, strokeWidth) {\n var stepSpace = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : 0;\n var offsetDeg = offset / 100 * 360 * ((360 - gapDegree) / 360);\n var positionDeg = gapDegree === 0 ? 0 : {\n bottom: 0,\n top: 180,\n left: 90,\n right: -90\n }[gapPosition];\n var strokeDashoffset = (100 - percent) / 100 * perimeterWithoutGap;\n // Fix percent accuracy when strokeLinecap is round\n // https://github.com/ant-design/ant-design/issues/35009\n if (strokeLinecap === 'round' && percent !== 100) {\n strokeDashoffset += strokeWidth / 2;\n // when percent is small enough (<= 1%), keep smallest value to avoid it's disappearance\n if (strokeDashoffset >= perimeterWithoutGap) {\n strokeDashoffset = perimeterWithoutGap - 0.01;\n }\n }\n return {\n stroke: typeof strokeColor === 'string' ? strokeColor : undefined,\n strokeDasharray: \"\".concat(perimeterWithoutGap, \"px \").concat(perimeter),\n strokeDashoffset: strokeDashoffset + stepSpace,\n transform: \"rotate(\".concat(rotateDeg + offsetDeg + positionDeg, \"deg)\"),\n transformOrigin: '0 0',\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s',\n fillOpacity: 0\n };\n};\nvar Circle = function Circle(_ref) {\n var id = _ref.id,\n prefixCls = _ref.prefixCls,\n steps = _ref.steps,\n strokeWidth = _ref.strokeWidth,\n trailWidth = _ref.trailWidth,\n _ref$gapDegree = _ref.gapDegree,\n gapDegree = _ref$gapDegree === void 0 ? 0 : _ref$gapDegree,\n gapPosition = _ref.gapPosition,\n trailColor = _ref.trailColor,\n strokeLinecap = _ref.strokeLinecap,\n style = _ref.style,\n className = _ref.className,\n strokeColor = _ref.strokeColor,\n percent = _ref.percent,\n restProps = _objectWithoutProperties(_ref, _excluded);\n var mergedId = useId(id);\n var gradientId = \"\".concat(mergedId, \"-gradient\");\n var radius = VIEW_BOX_SIZE / 2 - strokeWidth / 2;\n var perimeter = Math.PI * 2 * radius;\n var rotateDeg = gapDegree > 0 ? 90 + gapDegree / 2 : -90;\n var perimeterWithoutGap = perimeter * ((360 - gapDegree) / 360);\n var _ref2 = _typeof(steps) === 'object' ? steps : {\n count: steps,\n space: 2\n },\n stepCount = _ref2.count,\n stepSpace = _ref2.space;\n var circleStyle = getCircleStyle(perimeter, perimeterWithoutGap, 0, 100, rotateDeg, gapDegree, gapPosition, trailColor, strokeLinecap, strokeWidth);\n var percentList = toArray(percent);\n var strokeColorList = toArray(strokeColor);\n var gradient = strokeColorList.find(function (color) {\n return color && _typeof(color) === 'object';\n });\n var paths = useTransitionDuration();\n var getStokeList = function getStokeList() {\n var stackPtg = 0;\n return percentList.map(function (ptg, index) {\n var color = strokeColorList[index] || strokeColorList[strokeColorList.length - 1];\n var stroke = color && _typeof(color) === 'object' ? \"url(#\".concat(gradientId, \")\") : undefined;\n var circleStyleForStack = getCircleStyle(perimeter, perimeterWithoutGap, stackPtg, ptg, rotateDeg, gapDegree, gapPosition, color, strokeLinecap, strokeWidth);\n stackPtg += ptg;\n return /*#__PURE__*/React.createElement(\"circle\", {\n key: index,\n className: \"\".concat(prefixCls, \"-circle-path\"),\n r: radius,\n cx: 0,\n cy: 0,\n stroke: stroke,\n strokeLinecap: strokeLinecap,\n strokeWidth: strokeWidth,\n opacity: ptg === 0 ? 0 : 1,\n style: circleStyleForStack,\n ref: function ref(elem) {\n // https://reactjs.org/docs/refs-and-the-dom.html#callback-refs\n // React will call the ref callback with the DOM element when the component mounts,\n // and call it with `null` when it unmounts.\n // Refs are guaranteed to be up-to-date before componentDidMount or componentDidUpdate fires.\n paths[index] = elem;\n }\n });\n }).reverse();\n };\n var getStepStokeList = function getStepStokeList() {\n // only show the first percent when pass steps\n var current = Math.round(stepCount * (percentList[0] / 100));\n var stepPtg = 100 / stepCount;\n var stackPtg = 0;\n return new Array(stepCount).fill(null).map(function (_, index) {\n var color = index <= current - 1 ? strokeColorList[0] : trailColor;\n var stroke = color && _typeof(color) === 'object' ? \"url(#\".concat(gradientId, \")\") : undefined;\n var circleStyleForStack = getCircleStyle(perimeter, perimeterWithoutGap, stackPtg, stepPtg, rotateDeg, gapDegree, gapPosition, color, 'butt', strokeWidth, stepSpace);\n stackPtg += (perimeterWithoutGap - circleStyleForStack.strokeDashoffset + stepSpace) * 100 / perimeterWithoutGap;\n return /*#__PURE__*/React.createElement(\"circle\", {\n key: index,\n className: \"\".concat(prefixCls, \"-circle-path\"),\n r: radius,\n cx: 0,\n cy: 0,\n stroke: stroke\n // strokeLinecap={strokeLinecap}\n ,\n strokeWidth: strokeWidth,\n opacity: 1,\n style: circleStyleForStack,\n ref: function ref(elem) {\n paths[index] = elem;\n }\n });\n });\n };\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n className: classNames(\"\".concat(prefixCls, \"-circle\"), className),\n viewBox: \"\".concat(-VIEW_BOX_SIZE / 2, \" \").concat(-VIEW_BOX_SIZE / 2, \" \").concat(VIEW_BOX_SIZE, \" \").concat(VIEW_BOX_SIZE),\n style: style,\n id: id,\n role: \"presentation\"\n }, restProps), gradient && /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: gradientId,\n x1: \"100%\",\n y1: \"0%\",\n x2: \"0%\",\n y2: \"0%\"\n }, Object.keys(gradient).sort(function (a, b) {\n return stripPercentToNumber(a) - stripPercentToNumber(b);\n }).map(function (key, index) {\n return /*#__PURE__*/React.createElement(\"stop\", {\n key: index,\n offset: key,\n stopColor: gradient[key]\n });\n }))), !stepCount && /*#__PURE__*/React.createElement(\"circle\", {\n className: \"\".concat(prefixCls, \"-circle-trail\"),\n r: radius,\n cx: 0,\n cy: 0,\n stroke: trailColor,\n strokeLinecap: strokeLinecap,\n strokeWidth: trailWidth || strokeWidth,\n style: circleStyle\n }), stepCount ? getStepStokeList() : getStokeList());\n};\nCircle.defaultProps = defaultProps;\nCircle.displayName = 'Circle';\nexport default Circle;","import { presetPrimaryColors } from '@ant-design/colors';\nimport warning from '../_util/warning';\nexport function validProgress(progress) {\n if (!progress || progress < 0) {\n return 0;\n }\n if (progress > 100) {\n return 100;\n }\n return progress;\n}\nexport function getSuccessPercent(_ref) {\n let {\n success,\n successPercent\n } = _ref;\n let percent = successPercent;\n /** @deprecated Use `percent` instead */\n if (success && 'progress' in success) {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Progress', '`success.progress` is deprecated. Please use `success.percent` instead.') : void 0;\n percent = success.progress;\n }\n if (success && 'percent' in success) {\n percent = success.percent;\n }\n return percent;\n}\nexport const getPercentage = _ref2 => {\n let {\n percent,\n success,\n successPercent\n } = _ref2;\n const realSuccessPercent = validProgress(getSuccessPercent({\n success,\n successPercent\n }));\n return [realSuccessPercent, validProgress(validProgress(percent) - realSuccessPercent)];\n};\nexport const getStrokeColor = _ref3 => {\n let {\n success = {},\n strokeColor\n } = _ref3;\n const {\n strokeColor: successColor\n } = success;\n return [successColor || presetPrimaryColors.green, strokeColor || null];\n};","import classNames from 'classnames';\nimport { Circle as RCCircle } from 'rc-progress';\nimport * as React from 'react';\nimport Tooltip from '../tooltip';\nimport { getPercentage, getStrokeColor } from './utils';\nconst CIRCLE_MIN_STROKE_WIDTH = 3;\nconst getMinPercent = width => CIRCLE_MIN_STROKE_WIDTH / width * 100;\nconst Circle = props => {\n const {\n prefixCls,\n width = 120,\n strokeWidth = Math.max(getMinPercent(width), 6),\n trailColor = null,\n strokeLinecap = 'round',\n gapPosition,\n gapDegree,\n type,\n children,\n success\n } = props;\n const circleStyle = {\n width,\n height: width,\n fontSize: width * 0.15 + 6\n };\n const realGapDegree = React.useMemo(() => {\n // Support gapDeg = 0 when type = 'dashboard'\n if (gapDegree || gapDegree === 0) {\n return gapDegree;\n }\n if (type === 'dashboard') {\n return 75;\n }\n return undefined;\n }, [gapDegree, type]);\n const gapPos = gapPosition || type === 'dashboard' && 'bottom' || undefined;\n // using className to style stroke color\n const isGradient = Object.prototype.toString.call(props.strokeColor) === '[object Object]';\n const strokeColor = getStrokeColor({\n success,\n strokeColor: props.strokeColor\n });\n const wrapperClassName = classNames(`${prefixCls}-inner`, {\n [`${prefixCls}-circle-gradient`]: isGradient\n });\n const circleContent = /*#__PURE__*/React.createElement(RCCircle, {\n percent: getPercentage(props),\n strokeWidth: strokeWidth,\n trailWidth: strokeWidth,\n strokeColor: strokeColor,\n strokeLinecap: strokeLinecap,\n trailColor: trailColor,\n prefixCls: prefixCls,\n gapDegree: realGapDegree,\n gapPosition: gapPos\n });\n return /*#__PURE__*/React.createElement(\"div\", {\n className: wrapperClassName,\n style: circleStyle\n }, width <= 20 ? /*#__PURE__*/React.createElement(Tooltip, {\n title: children\n }, circleContent) : /*#__PURE__*/React.createElement(React.Fragment, null, circleContent, children));\n};\nexport default Circle;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { presetPrimaryColors } from '@ant-design/colors';\nimport * as React from 'react';\nimport { getSuccessPercent, validProgress } from './utils';\n/**\n * @example\n * {\n * \"0%\": \"#afc163\",\n * \"75%\": \"#009900\",\n * \"50%\": \"green\", // ====> '#afc163 0%, #66FF00 25%, #00CC00 50%, #009900 75%, #ffffff 100%'\n * \"25%\": \"#66FF00\",\n * \"100%\": \"#ffffff\"\n * }\n */\nexport const sortGradient = gradients => {\n let tempArr = [];\n Object.keys(gradients).forEach(key => {\n const formattedKey = parseFloat(key.replace(/%/g, ''));\n if (!isNaN(formattedKey)) {\n tempArr.push({\n key: formattedKey,\n value: gradients[key]\n });\n }\n });\n tempArr = tempArr.sort((a, b) => a.key - b.key);\n return tempArr.map(_ref => {\n let {\n key,\n value\n } = _ref;\n return `${value} ${key}%`;\n }).join(', ');\n};\n/**\n * Then this man came to realize the truth: Besides six pence, there is the moon. Besides bread and\n * butter, there is the bug. And... Besides women, there is the code.\n *\n * @example\n * {\n * \"0%\": \"#afc163\",\n * \"25%\": \"#66FF00\",\n * \"50%\": \"#00CC00\", // ====> linear-gradient(to right, #afc163 0%, #66FF00 25%,\n * \"75%\": \"#009900\", // #00CC00 50%, #009900 75%, #ffffff 100%)\n * \"100%\": \"#ffffff\"\n * }\n */\nexport const handleGradient = (strokeColor, directionConfig) => {\n const {\n from = presetPrimaryColors.blue,\n to = presetPrimaryColors.blue,\n direction = directionConfig === 'rtl' ? 'to left' : 'to right'\n } = strokeColor,\n rest = __rest(strokeColor, [\"from\", \"to\", \"direction\"]);\n if (Object.keys(rest).length !== 0) {\n const sortedGradients = sortGradient(rest);\n return {\n backgroundImage: `linear-gradient(${direction}, ${sortedGradients})`\n };\n }\n return {\n backgroundImage: `linear-gradient(${direction}, ${from}, ${to})`\n };\n};\nconst Line = props => {\n const {\n prefixCls,\n direction: directionConfig,\n percent,\n strokeWidth,\n size,\n strokeColor,\n strokeLinecap = 'round',\n children,\n trailColor = null,\n success\n } = props;\n const backgroundProps = strokeColor && typeof strokeColor !== 'string' ? handleGradient(strokeColor, directionConfig) : {\n backgroundColor: strokeColor\n };\n const borderRadius = strokeLinecap === 'square' || strokeLinecap === 'butt' ? 0 : undefined;\n const trailStyle = {\n backgroundColor: trailColor || undefined,\n borderRadius\n };\n const percentStyle = Object.assign({\n width: `${validProgress(percent)}%`,\n height: strokeWidth || (size === 'small' ? 6 : 8),\n borderRadius\n }, backgroundProps);\n const successPercent = getSuccessPercent(props);\n const successPercentStyle = {\n width: `${validProgress(successPercent)}%`,\n height: strokeWidth || (size === 'small' ? 6 : 8),\n borderRadius,\n backgroundColor: success === null || success === void 0 ? void 0 : success.strokeColor\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-outer`\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-inner`,\n style: trailStyle\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-bg`,\n style: percentStyle\n }), successPercent !== undefined ? /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-success-bg`,\n style: successPercentStyle\n }) : null)), children);\n};\nexport default Line;","import classNames from 'classnames';\nimport * as React from 'react';\nconst Steps = props => {\n const {\n size,\n steps,\n percent = 0,\n strokeWidth = 8,\n strokeColor,\n trailColor = null,\n prefixCls,\n children\n } = props;\n const current = Math.round(steps * (percent / 100));\n const stepWidth = size === 'small' ? 2 : 14;\n const styledSteps = new Array(steps);\n for (let i = 0; i < steps; i++) {\n const color = Array.isArray(strokeColor) ? strokeColor[i] : strokeColor;\n styledSteps[i] = /*#__PURE__*/React.createElement(\"div\", {\n key: i,\n className: classNames(`${prefixCls}-steps-item`, {\n [`${prefixCls}-steps-item-active`]: i <= current - 1\n }),\n style: {\n backgroundColor: i <= current - 1 ? color : trailColor,\n width: stepWidth,\n height: strokeWidth\n }\n });\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n className: `${prefixCls}-steps-outer`\n }, styledSteps, children);\n};\nexport default Steps;","import { Keyframes } from '@ant-design/cssinjs';\nimport { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport { resetComponent } from '../../style';\nconst antProgressActive = new Keyframes('antProgressActive', {\n '0%': {\n transform: 'translateX(-100%) scaleX(0)',\n opacity: 0.1\n },\n '20%': {\n transform: 'translateX(-100%) scaleX(0)',\n opacity: 0.5\n },\n to: {\n transform: 'translateX(0) scaleX(1)',\n opacity: 0\n }\n});\nconst genBaseStyle = token => {\n const {\n componentCls: progressCls,\n iconCls: iconPrefixCls\n } = token;\n return {\n [progressCls]: Object.assign(Object.assign({}, resetComponent(token)), {\n display: 'inline-block',\n '&-rtl': {\n direction: 'rtl'\n },\n '&-line': {\n position: 'relative',\n width: '100%',\n fontSize: token.fontSize,\n marginInlineEnd: token.marginXS,\n marginBottom: token.marginXS\n },\n [`${progressCls}-outer`]: {\n display: 'inline-block',\n width: '100%'\n },\n [`&${progressCls}-show-info`]: {\n [`${progressCls}-outer`]: {\n marginInlineEnd: `calc(-2em - ${token.marginXS}px)`,\n paddingInlineEnd: `calc(2em + ${token.paddingXS}px)`\n }\n },\n [`${progressCls}-inner`]: {\n position: 'relative',\n display: 'inline-block',\n width: '100%',\n overflow: 'hidden',\n verticalAlign: 'middle',\n backgroundColor: token.progressRemainingColor,\n borderRadius: token.progressLineRadius\n },\n [`${progressCls}-inner:not(${progressCls}-circle-gradient)`]: {\n [`${progressCls}-circle-path`]: {\n stroke: token.colorInfo\n }\n },\n [`${progressCls}-success-bg, ${progressCls}-bg`]: {\n position: 'relative',\n backgroundColor: token.colorInfo,\n borderRadius: token.progressLineRadius,\n transition: `all ${token.motionDurationSlow} ${token.motionEaseInOutCirc}`\n },\n [`${progressCls}-success-bg`]: {\n position: 'absolute',\n insetBlockStart: 0,\n insetInlineStart: 0,\n backgroundColor: token.colorSuccess\n },\n [`${progressCls}-text`]: {\n display: 'inline-block',\n width: '2em',\n marginInlineStart: token.marginXS,\n color: token.progressInfoTextColor,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n textAlign: 'start',\n verticalAlign: 'middle',\n wordBreak: 'normal',\n [iconPrefixCls]: {\n fontSize: token.fontSize\n }\n },\n [`&${progressCls}-status-active`]: {\n [`${progressCls}-bg::before`]: {\n position: 'absolute',\n inset: 0,\n backgroundColor: token.colorBgContainer,\n borderRadius: token.progressLineRadius,\n opacity: 0,\n animationName: antProgressActive,\n animationDuration: token.progressActiveMotionDuration,\n animationTimingFunction: token.motionEaseOutQuint,\n animationIterationCount: 'infinite',\n content: '\"\"'\n }\n },\n [`&${progressCls}-status-exception`]: {\n [`${progressCls}-bg`]: {\n backgroundColor: token.colorError\n },\n [`${progressCls}-text`]: {\n color: token.colorError\n }\n },\n [`&${progressCls}-status-exception ${progressCls}-inner:not(${progressCls}-circle-gradient)`]: {\n [`${progressCls}-circle-path`]: {\n stroke: token.colorError\n }\n },\n [`&${progressCls}-status-success`]: {\n [`${progressCls}-bg`]: {\n backgroundColor: token.colorSuccess\n },\n [`${progressCls}-text`]: {\n color: token.colorSuccess\n }\n },\n [`&${progressCls}-status-success ${progressCls}-inner:not(${progressCls}-circle-gradient)`]: {\n [`${progressCls}-circle-path`]: {\n stroke: token.colorSuccess\n }\n }\n })\n };\n};\nconst genCircleStyle = token => {\n const {\n componentCls: progressCls,\n iconCls: iconPrefixCls\n } = token;\n return {\n [progressCls]: {\n [`${progressCls}-circle-trail`]: {\n stroke: token.progressRemainingColor\n },\n [`&${progressCls}-circle ${progressCls}-inner`]: {\n position: 'relative',\n lineHeight: 1,\n backgroundColor: 'transparent'\n },\n [`&${progressCls}-circle ${progressCls}-text`]: {\n position: 'absolute',\n insetBlockStart: '50%',\n insetInlineStart: 0,\n width: '100%',\n margin: 0,\n padding: 0,\n color: token.colorText,\n lineHeight: 1,\n whiteSpace: 'normal',\n textAlign: 'center',\n transform: 'translateY(-50%)',\n [iconPrefixCls]: {\n fontSize: `${token.fontSize / token.fontSizeSM}em`\n }\n },\n [`${progressCls}-circle&-status-exception`]: {\n [`${progressCls}-text`]: {\n color: token.colorError\n }\n },\n [`${progressCls}-circle&-status-success`]: {\n [`${progressCls}-text`]: {\n color: token.colorSuccess\n }\n }\n },\n [`${progressCls}-inline-circle`]: {\n lineHeight: 1,\n [`${progressCls}-inner`]: {\n verticalAlign: 'bottom'\n }\n }\n };\n};\nconst genStepStyle = token => {\n const {\n componentCls: progressCls\n } = token;\n return {\n [progressCls]: {\n [`${progressCls}-steps`]: {\n display: 'inline-block',\n '&-outer': {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n '&-item': {\n flexShrink: 0,\n minWidth: token.progressStepMinWidth,\n marginInlineEnd: token.progressStepMarginInlineEnd,\n backgroundColor: token.progressRemainingColor,\n transition: `all ${token.motionDurationSlow}`,\n '&-active': {\n backgroundColor: token.colorInfo\n }\n }\n }\n }\n };\n};\nconst genSmallLine = token => {\n const {\n componentCls: progressCls,\n iconCls: iconPrefixCls\n } = token;\n return {\n [progressCls]: {\n [`${progressCls}-small&-line, ${progressCls}-small&-line ${progressCls}-text ${iconPrefixCls}`]: {\n fontSize: token.fontSizeSM\n }\n }\n };\n};\nexport default genComponentStyleHook('Progress', token => {\n const progressStepMarginInlineEnd = token.marginXXS / 2;\n const progressToken = mergeToken(token, {\n progressLineRadius: 100,\n progressInfoTextColor: token.colorText,\n progressDefaultColor: token.colorInfo,\n progressRemainingColor: token.colorFillSecondary,\n progressStepMarginInlineEnd,\n progressStepMinWidth: progressStepMarginInlineEnd,\n progressActiveMotionDuration: '2.4s'\n });\n return [genBaseStyle(progressToken), genCircleStyle(progressToken), genStepStyle(progressToken), genSmallLine(progressToken)];\n});","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport CheckCircleFilled from \"@ant-design/icons/es/icons/CheckCircleFilled\";\nimport CheckOutlined from \"@ant-design/icons/es/icons/CheckOutlined\";\nimport CloseCircleFilled from \"@ant-design/icons/es/icons/CloseCircleFilled\";\nimport CloseOutlined from \"@ant-design/icons/es/icons/CloseOutlined\";\nimport classNames from 'classnames';\nimport omit from \"rc-util/es/omit\";\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport warning from '../_util/warning';\nimport Circle from './Circle';\nimport Line from './Line';\nimport Steps from './Steps';\nimport useStyle from './style';\nimport { getSuccessPercent, validProgress } from './utils';\nconst ProgressTypes = ['line', 'circle', 'dashboard'];\nconst ProgressStatuses = ['normal', 'exception', 'active', 'success'];\nconst Progress = props => {\n const {\n prefixCls: customizePrefixCls,\n className,\n rootClassName,\n steps,\n strokeColor,\n percent = 0,\n size = 'default',\n showInfo = true,\n type = 'line',\n status,\n format\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"className\", \"rootClassName\", \"steps\", \"strokeColor\", \"percent\", \"size\", \"showInfo\", \"type\", \"status\", \"format\"]);\n const percentNumber = React.useMemo(() => {\n var _a, _b;\n const successPercent = getSuccessPercent(props);\n return parseInt(successPercent !== undefined ? (_a = successPercent !== null && successPercent !== void 0 ? successPercent : 0) === null || _a === void 0 ? void 0 : _a.toString() : (_b = percent !== null && percent !== void 0 ? percent : 0) === null || _b === void 0 ? void 0 : _b.toString(), 10);\n }, [percent, props.success, props.successPercent]);\n const progressStatus = React.useMemo(() => {\n if (!ProgressStatuses.includes(status) && percentNumber >= 100) {\n return 'success';\n }\n return status || 'normal';\n }, [status, percentNumber]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('progress', customizePrefixCls);\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const progressInfo = React.useMemo(() => {\n if (!showInfo) {\n return null;\n }\n const successPercent = getSuccessPercent(props);\n let text;\n const textFormatter = format || (number => `${number}%`);\n const isLineType = type === 'line';\n if (format || progressStatus !== 'exception' && progressStatus !== 'success') {\n text = textFormatter(validProgress(percent), validProgress(successPercent));\n } else if (progressStatus === 'exception') {\n text = isLineType ? /*#__PURE__*/React.createElement(CloseCircleFilled, null) : /*#__PURE__*/React.createElement(CloseOutlined, null);\n } else if (progressStatus === 'success') {\n text = isLineType ? /*#__PURE__*/React.createElement(CheckCircleFilled, null) : /*#__PURE__*/React.createElement(CheckOutlined, null);\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-text`,\n title: typeof text === 'string' ? text : undefined\n }, text);\n }, [showInfo, percentNumber, progressStatus, type, prefixCls, format]);\n process.env.NODE_ENV !== \"production\" ? warning(!('successPercent' in props), 'Progress', '`successPercent` is deprecated. Please use `success.percent` instead.') : void 0;\n const strokeColorNotArray = Array.isArray(strokeColor) ? strokeColor[0] : strokeColor;\n const strokeColorNotGradient = typeof strokeColor === 'string' || Array.isArray(strokeColor) ? strokeColor : undefined;\n let progress;\n // Render progress shape\n if (type === 'line') {\n progress = steps ? /*#__PURE__*/React.createElement(Steps, Object.assign({}, props, {\n strokeColor: strokeColorNotGradient,\n prefixCls: prefixCls,\n steps: steps\n }), progressInfo) : /*#__PURE__*/React.createElement(Line, Object.assign({}, props, {\n strokeColor: strokeColorNotArray,\n prefixCls: prefixCls,\n direction: direction\n }), progressInfo);\n } else if (type === 'circle' || type === 'dashboard') {\n progress = /*#__PURE__*/React.createElement(Circle, Object.assign({}, props, {\n strokeColor: strokeColorNotArray,\n prefixCls: prefixCls,\n progressStatus: progressStatus\n }), progressInfo);\n }\n const classString = classNames(prefixCls, {\n [`${prefixCls}-inline-circle`]: type === 'circle' && props.width <= 20,\n [`${prefixCls}-${type === 'dashboard' && 'circle' || steps && 'steps' || type}`]: true,\n [`${prefixCls}-status-${progressStatus}`]: true,\n [`${prefixCls}-show-info`]: showInfo,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, rootClassName, hashId);\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: classString,\n role: \"progressbar\"\n }, omit(restProps, ['trailColor', 'strokeWidth', 'width', 'gapDegree', 'gapPosition', 'strokeLinecap', 'success', 'successPercent'])), progress));\n};\nif (process.env.NODE_ENV !== 'production') {\n Progress.displayName = 'Progress';\n}\nexport default Progress;","import Progress from './progress';\nexport default Progress;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport useFlexGapSupport from '../_util/hooks/useFlexGapSupport';\nimport useResponsiveObserver, { responsiveArray } from '../_util/responsiveObserver';\nimport RowContext from './RowContext';\nimport { useRowStyle } from './style';\nconst RowAligns = ['top', 'middle', 'bottom', 'stretch'];\nconst RowJustify = ['start', 'end', 'center', 'space-around', 'space-between', 'space-evenly'];\nfunction useMergePropByScreen(oriProp, screen) {\n const [prop, setProp] = React.useState(typeof oriProp === 'string' ? oriProp : '');\n const clacMergeAlignOrJustify = () => {\n if (typeof oriProp === 'string') {\n setProp(oriProp);\n }\n if (typeof oriProp !== 'object') {\n return;\n }\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint = responsiveArray[i];\n // if do not match, do nothing\n if (!screen[breakpoint]) continue;\n const curVal = oriProp[breakpoint];\n if (curVal !== undefined) {\n setProp(curVal);\n return;\n }\n }\n };\n React.useEffect(() => {\n clacMergeAlignOrJustify();\n }, [JSON.stringify(oriProp), screen]);\n return prop;\n}\nconst Row = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n prefixCls: customizePrefixCls,\n justify,\n align,\n className,\n style,\n children,\n gutter = 0,\n wrap\n } = props,\n others = __rest(props, [\"prefixCls\", \"justify\", \"align\", \"className\", \"style\", \"children\", \"gutter\", \"wrap\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const [screens, setScreens] = React.useState({\n xs: true,\n sm: true,\n md: true,\n lg: true,\n xl: true,\n xxl: true\n });\n // to save screens info when responsiveObserve callback had been call\n const [curScreens, setCurScreens] = React.useState({\n xs: false,\n sm: false,\n md: false,\n lg: false,\n xl: false,\n xxl: false\n });\n // ================================== calc reponsive data ==================================\n const mergeAlign = useMergePropByScreen(align, curScreens);\n const mergeJustify = useMergePropByScreen(justify, curScreens);\n const supportFlexGap = useFlexGapSupport();\n const gutterRef = React.useRef(gutter);\n const responsiveObserver = useResponsiveObserver();\n // ================================== Effect ==================================\n React.useEffect(() => {\n const token = responsiveObserver.subscribe(screen => {\n setCurScreens(screen);\n const currentGutter = gutterRef.current || 0;\n if (!Array.isArray(currentGutter) && typeof currentGutter === 'object' || Array.isArray(currentGutter) && (typeof currentGutter[0] === 'object' || typeof currentGutter[1] === 'object')) {\n setScreens(screen);\n }\n });\n return () => responsiveObserver.unsubscribe(token);\n }, []);\n // ================================== Render ==================================\n const getGutter = () => {\n const results = [undefined, undefined];\n const normalizedGutter = Array.isArray(gutter) ? gutter : [gutter, undefined];\n normalizedGutter.forEach((g, index) => {\n if (typeof g === 'object') {\n for (let i = 0; i < responsiveArray.length; i++) {\n const breakpoint = responsiveArray[i];\n if (screens[breakpoint] && g[breakpoint] !== undefined) {\n results[index] = g[breakpoint];\n break;\n }\n }\n } else {\n results[index] = g;\n }\n });\n return results;\n };\n const prefixCls = getPrefixCls('row', customizePrefixCls);\n const [wrapSSR, hashId] = useRowStyle(prefixCls);\n const gutters = getGutter();\n const classes = classNames(prefixCls, {\n [`${prefixCls}-no-wrap`]: wrap === false,\n [`${prefixCls}-${mergeJustify}`]: mergeJustify,\n [`${prefixCls}-${mergeAlign}`]: mergeAlign,\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, hashId);\n // Add gutter related style\n const rowStyle = {};\n const horizontalGutter = gutters[0] != null && gutters[0] > 0 ? gutters[0] / -2 : undefined;\n const verticalGutter = gutters[1] != null && gutters[1] > 0 ? gutters[1] / -2 : undefined;\n if (horizontalGutter) {\n rowStyle.marginLeft = horizontalGutter;\n rowStyle.marginRight = horizontalGutter;\n }\n if (supportFlexGap) {\n // Set gap direct if flex gap support\n [, rowStyle.rowGap] = gutters;\n } else if (verticalGutter) {\n rowStyle.marginTop = verticalGutter;\n rowStyle.marginBottom = verticalGutter;\n }\n // \"gutters\" is a new array in each rendering phase, it'll make 'React.useMemo' effectless.\n // So we deconstruct \"gutters\" variable here.\n const [gutterH, gutterV] = gutters;\n const rowContext = React.useMemo(() => ({\n gutter: [gutterH, gutterV],\n wrap,\n supportFlexGap\n }), [gutterH, gutterV, wrap, supportFlexGap]);\n return wrapSSR( /*#__PURE__*/React.createElement(RowContext.Provider, {\n value: rowContext\n }, /*#__PURE__*/React.createElement(\"div\", Object.assign({}, others, {\n className: classes,\n style: Object.assign(Object.assign({}, rowStyle), style),\n ref: ref\n }), children)));\n});\nif (process.env.NODE_ENV !== 'production') {\n Row.displayName = 'Row';\n}\nexport default Row;","import { Row } from '../grid';\nexport default Row;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport useStyle from './style';\nexport const SpaceCompactItemContext = /*#__PURE__*/React.createContext(null);\nexport const useCompactItemContext = (prefixCls, direction) => {\n const compactItemContext = React.useContext(SpaceCompactItemContext);\n const compactItemClassnames = React.useMemo(() => {\n if (!compactItemContext) return '';\n const {\n compactDirection,\n isFirstItem,\n isLastItem\n } = compactItemContext;\n const separator = compactDirection === 'vertical' ? '-vertical-' : '-';\n return classNames({\n [`${prefixCls}-compact${separator}item`]: true,\n [`${prefixCls}-compact${separator}first-item`]: isFirstItem,\n [`${prefixCls}-compact${separator}last-item`]: isLastItem,\n [`${prefixCls}-compact${separator}item-rtl`]: direction === 'rtl'\n });\n }, [prefixCls, direction, compactItemContext]);\n return {\n compactSize: compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactSize,\n compactDirection: compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactDirection,\n compactItemClassnames\n };\n};\nexport const NoCompactStyle = _ref => {\n let {\n children\n } = _ref;\n return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {\n value: null\n }, children);\n};\nconst CompactItem = _a => {\n var {\n children\n } = _a,\n otherProps = __rest(_a, [\"children\"]);\n return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {\n value: otherProps\n }, children);\n};\nconst Compact = props => {\n const {\n getPrefixCls,\n direction: directionConfig\n } = React.useContext(ConfigContext);\n const {\n size = 'middle',\n direction,\n block,\n prefixCls: customizePrefixCls,\n className,\n rootClassName,\n children\n } = props,\n restProps = __rest(props, [\"size\", \"direction\", \"block\", \"prefixCls\", \"className\", \"rootClassName\", \"children\"]);\n const prefixCls = getPrefixCls('space-compact', customizePrefixCls);\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const clx = classNames(prefixCls, hashId, {\n [`${prefixCls}-rtl`]: directionConfig === 'rtl',\n [`${prefixCls}-block`]: block,\n [`${prefixCls}-vertical`]: direction === 'vertical'\n }, className, rootClassName);\n const compactItemContext = React.useContext(SpaceCompactItemContext);\n const childNodes = toArray(children);\n const nodes = React.useMemo(() => childNodes.map((child, i) => {\n const key = child && child.key || `${prefixCls}-item-${i}`;\n return /*#__PURE__*/React.createElement(CompactItem, {\n key: key,\n compactSize: size,\n compactDirection: direction,\n isFirstItem: i === 0 && (!compactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isFirstItem)),\n isLastItem: i === childNodes.length - 1 && (!compactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isLastItem))\n }, child);\n }), [size, childNodes, compactItemContext]);\n // =========================== Render ===========================\n if (childNodes.length === 0) {\n return null;\n }\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: clx\n }, restProps), nodes));\n};\nexport default Compact;","import * as React from 'react';\nimport { SpaceContext } from '.';\nexport default function Item(_ref) {\n let {\n className,\n direction,\n index,\n marginDirection,\n children,\n split,\n wrap\n } = _ref;\n const {\n horizontalSize,\n verticalSize,\n latestIndex,\n supportFlexGap\n } = React.useContext(SpaceContext);\n let style = {};\n if (!supportFlexGap) {\n if (direction === 'vertical') {\n if (index < latestIndex) {\n style = {\n marginBottom: horizontalSize / (split ? 2 : 1)\n };\n }\n } else {\n style = Object.assign(Object.assign({}, index < latestIndex && {\n [marginDirection]: horizontalSize / (split ? 2 : 1)\n }), wrap && {\n paddingBottom: verticalSize\n });\n }\n }\n if (children === null || children === undefined) {\n return null;\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n className: className,\n style: style\n }, children), index < latestIndex && split && /*#__PURE__*/React.createElement(\"span\", {\n className: `${className}-split`,\n style: style\n }, split));\n}","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport useFlexGapSupport from '../_util/hooks/useFlexGapSupport';\nimport Compact from './Compact';\nimport Item from './Item';\nimport useStyle from './style';\nexport const SpaceContext = /*#__PURE__*/React.createContext({\n latestIndex: 0,\n horizontalSize: 0,\n verticalSize: 0,\n supportFlexGap: false\n});\nconst spaceSize = {\n small: 8,\n middle: 16,\n large: 24\n};\nfunction getNumberSize(size) {\n return typeof size === 'string' ? spaceSize[size] : size || 0;\n}\nconst Space = props => {\n const {\n getPrefixCls,\n space,\n direction: directionConfig\n } = React.useContext(ConfigContext);\n const {\n size = (space === null || space === void 0 ? void 0 : space.size) || 'small',\n align,\n className,\n rootClassName,\n children,\n direction = 'horizontal',\n prefixCls: customizePrefixCls,\n split,\n style,\n wrap = false\n } = props,\n otherProps = __rest(props, [\"size\", \"align\", \"className\", \"rootClassName\", \"children\", \"direction\", \"prefixCls\", \"split\", \"style\", \"wrap\"]);\n const supportFlexGap = useFlexGapSupport();\n const [horizontalSize, verticalSize] = React.useMemo(() => (Array.isArray(size) ? size : [size, size]).map(item => getNumberSize(item)), [size]);\n const childNodes = toArray(children, {\n keepEmpty: true\n });\n const mergedAlign = align === undefined && direction === 'horizontal' ? 'center' : align;\n const prefixCls = getPrefixCls('space', customizePrefixCls);\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const cn = classNames(prefixCls, hashId, `${prefixCls}-${direction}`, {\n [`${prefixCls}-rtl`]: directionConfig === 'rtl',\n [`${prefixCls}-align-${mergedAlign}`]: mergedAlign\n }, className, rootClassName);\n const itemClassName = `${prefixCls}-item`;\n const marginDirection = directionConfig === 'rtl' ? 'marginLeft' : 'marginRight';\n // Calculate latest one\n let latestIndex = 0;\n const nodes = childNodes.map((child, i) => {\n if (child !== null && child !== undefined) {\n latestIndex = i;\n }\n const key = child && child.key || `${itemClassName}-${i}`;\n return /*#__PURE__*/React.createElement(Item, {\n className: itemClassName,\n key: key,\n direction: direction,\n index: i,\n marginDirection: marginDirection,\n split: split,\n wrap: wrap\n }, child);\n });\n const spaceContext = React.useMemo(() => ({\n horizontalSize,\n verticalSize,\n latestIndex,\n supportFlexGap\n }), [horizontalSize, verticalSize, latestIndex, supportFlexGap]);\n // =========================== Render ===========================\n if (childNodes.length === 0) {\n return null;\n }\n const gapStyle = {};\n if (wrap) {\n gapStyle.flexWrap = 'wrap';\n // Patch for gap not support\n if (!supportFlexGap) {\n gapStyle.marginBottom = -verticalSize;\n }\n }\n if (supportFlexGap) {\n gapStyle.columnGap = horizontalSize;\n gapStyle.rowGap = verticalSize;\n }\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", Object.assign({\n className: cn,\n style: Object.assign(Object.assign({}, gapStyle), style)\n }, otherProps), /*#__PURE__*/React.createElement(SpaceContext.Provider, {\n value: spaceContext\n }, nodes)));\n};\nif (process.env.NODE_ENV !== 'production') {\n Space.displayName = 'Space';\n}\nconst CompoundedSpace = Space;\nCompoundedSpace.Compact = Compact;\nexport default CompoundedSpace;","const genSpaceCompactStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [componentCls]: {\n display: 'inline-flex',\n '&-block': {\n display: 'flex',\n width: '100%'\n },\n '&-vertical': {\n flexDirection: 'column'\n }\n }\n };\n};\n// ============================== Export ==============================\nexport default genSpaceCompactStyle;","import { genComponentStyleHook } from '../../theme/internal';\nimport genSpaceCompactStyle from './compact';\nconst genSpaceStyle = token => {\n const {\n componentCls\n } = token;\n return {\n [componentCls]: {\n display: 'inline-flex',\n '&-rtl': {\n direction: 'rtl'\n },\n '&-vertical': {\n flexDirection: 'column'\n },\n '&-align': {\n flexDirection: 'column',\n '&-center': {\n alignItems: 'center'\n },\n '&-start': {\n alignItems: 'flex-start'\n },\n '&-end': {\n alignItems: 'flex-end'\n },\n '&-baseline': {\n alignItems: 'baseline'\n }\n },\n [`${componentCls}-item`]: {\n '&:empty': {\n display: 'none'\n }\n }\n }\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Space', token => [genSpaceStyle(token), genSpaceCompactStyle(token)]);","// handle border collapse\nfunction compactItemBorder(token, parentCls, options) {\n const {\n focusElCls,\n focus,\n borderElCls\n } = options;\n const childCombinator = borderElCls ? '> *' : '';\n const hoverEffects = ['hover', focus ? 'focus' : null, 'active'].filter(Boolean).map(n => `&:${n} ${childCombinator}`).join(',');\n return {\n [`&-item:not(${parentCls}-last-item)`]: {\n marginInlineEnd: -token.lineWidth\n },\n '&-item': Object.assign(Object.assign({\n [hoverEffects]: {\n zIndex: 2\n }\n }, focusElCls ? {\n [`&${focusElCls}`]: {\n zIndex: 2\n }\n } : {}), {\n [`&[disabled] ${childCombinator}`]: {\n zIndex: 0\n }\n })\n };\n}\n// handle border-radius\nfunction compactItemBorderRadius(prefixCls, parentCls, options) {\n const {\n borderElCls\n } = options;\n const childCombinator = borderElCls ? `> ${borderElCls}` : '';\n return {\n [`&-item:not(${parentCls}-first-item):not(${parentCls}-last-item) ${childCombinator}`]: {\n borderRadius: 0\n },\n [`&-item:not(${parentCls}-last-item)${parentCls}-first-item`]: {\n [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n borderStartEndRadius: 0,\n borderEndEndRadius: 0\n }\n },\n [`&-item:not(${parentCls}-first-item)${parentCls}-last-item`]: {\n [`& ${childCombinator}, &${prefixCls}-sm ${childCombinator}, &${prefixCls}-lg ${childCombinator}`]: {\n borderStartStartRadius: 0,\n borderEndStartRadius: 0\n }\n }\n };\n}\nexport function genCompactItemStyle(token) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n focus: true\n };\n const {\n componentCls\n } = token;\n const compactCls = `${componentCls}-compact`;\n return {\n [compactCls]: Object.assign(Object.assign({}, compactItemBorder(token, compactCls, options)), compactItemBorderRadius(componentCls, compactCls, options))\n };\n}","export { operationUnit } from './operationUnit';\nexport { roundedArrow } from './roundedArrow';\nexport { genPresetColor } from './presetColor';\nexport const textEllipsis = {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n};\nexport const resetComponent = token => ({\n boxSizing: 'border-box',\n margin: 0,\n padding: 0,\n color: token.colorText,\n fontSize: token.fontSize,\n // font-variant: @font-variant-base;\n lineHeight: token.lineHeight,\n listStyle: 'none',\n // font-feature-settings: @font-feature-settings-base;\n fontFamily: token.fontFamily\n});\nexport const resetIcon = () => ({\n display: 'inline-flex',\n alignItems: 'center',\n color: 'inherit',\n fontStyle: 'normal',\n lineHeight: 0,\n textAlign: 'center',\n textTransform: 'none',\n // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n verticalAlign: '-0.125em',\n textRendering: 'optimizeLegibility',\n '-webkit-font-smoothing': 'antialiased',\n '-moz-osx-font-smoothing': 'grayscale',\n '> *': {\n lineHeight: 1\n },\n svg: {\n display: 'inline-block'\n }\n});\nexport const clearFix = () => ({\n // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n '&::before': {\n display: 'table',\n content: '\"\"'\n },\n '&::after': {\n // https://github.com/ant-design/ant-design/issues/21864\n display: 'table',\n clear: 'both',\n content: '\"\"'\n }\n});\nexport const genLinkStyle = token => ({\n a: {\n color: token.colorLink,\n textDecoration: token.linkDecoration,\n backgroundColor: 'transparent',\n outline: 'none',\n cursor: 'pointer',\n transition: `color ${token.motionDurationSlow}`,\n '-webkit-text-decoration-skip': 'objects',\n '&:hover': {\n color: token.colorLinkHover\n },\n '&:active': {\n color: token.colorLinkActive\n },\n [`&:active,\n &:hover`]: {\n textDecoration: token.linkHoverDecoration,\n outline: 0\n },\n // https://github.com/ant-design/ant-design/issues/22503\n '&:focus': {\n textDecoration: token.linkFocusDecoration,\n outline: 0\n },\n '&[disabled]': {\n color: token.colorTextDisabled,\n cursor: 'not-allowed'\n }\n }\n});\nexport const genCommonStyle = (token, componentPrefixCls) => {\n const {\n fontFamily,\n fontSize\n } = token;\n const rootPrefixSelector = `[class^=\"${componentPrefixCls}\"], [class*=\" ${componentPrefixCls}\"]`;\n return {\n [rootPrefixSelector]: {\n fontFamily,\n fontSize,\n boxSizing: 'border-box',\n '&::before, &::after': {\n boxSizing: 'border-box'\n },\n [rootPrefixSelector]: {\n boxSizing: 'border-box',\n '&::before, &::after': {\n boxSizing: 'border-box'\n }\n }\n }\n };\n};\nexport const genFocusOutline = token => ({\n outline: `${token.lineWidthBold}px solid ${token.colorPrimaryBorder}`,\n outlineOffset: 1,\n transition: 'outline-offset 0s, outline 0s'\n});\nexport const genFocusStyle = token => ({\n '&:focus-visible': Object.assign({}, genFocusOutline(token))\n});","import { Keyframes } from '@ant-design/cssinjs';\nimport { initMotion } from './motion';\nexport const fadeIn = new Keyframes('antFadeIn', {\n '0%': {\n opacity: 0\n },\n '100%': {\n opacity: 1\n }\n});\nexport const fadeOut = new Keyframes('antFadeOut', {\n '0%': {\n opacity: 1\n },\n '100%': {\n opacity: 0\n }\n});\nexport const initFadeMotion = function (token) {\n let sameLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n const {\n antCls\n } = token;\n const motionCls = `${antCls}-fade`;\n const sameLevelPrefix = sameLevel ? '&' : '';\n return [initMotion(motionCls, fadeIn, fadeOut, token.motionDurationMid, sameLevel), {\n [`\n ${sameLevelPrefix}${motionCls}-enter,\n ${sameLevelPrefix}${motionCls}-appear\n `]: {\n opacity: 0,\n animationTimingFunction: 'linear'\n },\n [`${sameLevelPrefix}${motionCls}-leave`]: {\n animationTimingFunction: 'linear'\n }\n }];\n};","const initMotionCommon = duration => ({\n animationDuration: duration,\n animationFillMode: 'both'\n});\n// FIXME: origin less code seems same as initMotionCommon. Maybe we can safe remove\nconst initMotionCommonLeave = duration => ({\n animationDuration: duration,\n animationFillMode: 'both'\n});\nexport const initMotion = function (motionCls, inKeyframes, outKeyframes, duration) {\n let sameLevel = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n const sameLevelPrefix = sameLevel ? '&' : '';\n return {\n [`\n ${sameLevelPrefix}${motionCls}-enter,\n ${sameLevelPrefix}${motionCls}-appear\n `]: Object.assign(Object.assign({}, initMotionCommon(duration)), {\n animationPlayState: 'paused'\n }),\n [`${sameLevelPrefix}${motionCls}-leave`]: Object.assign(Object.assign({}, initMotionCommonLeave(duration)), {\n animationPlayState: 'paused'\n }),\n [`\n ${sameLevelPrefix}${motionCls}-enter${motionCls}-enter-active,\n ${sameLevelPrefix}${motionCls}-appear${motionCls}-appear-active\n `]: {\n animationName: inKeyframes,\n animationPlayState: 'running'\n },\n [`${sameLevelPrefix}${motionCls}-leave${motionCls}-leave-active`]: {\n animationName: outKeyframes,\n animationPlayState: 'running',\n pointerEvents: 'none'\n }\n };\n};","import { Keyframes } from '@ant-design/cssinjs';\nimport { initMotion } from './motion';\nexport const zoomIn = new Keyframes('antZoomIn', {\n '0%': {\n transform: 'scale(0.2)',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 1\n }\n});\nexport const zoomOut = new Keyframes('antZoomOut', {\n '0%': {\n transform: 'scale(1)'\n },\n '100%': {\n transform: 'scale(0.2)',\n opacity: 0\n }\n});\nexport const zoomBigIn = new Keyframes('antZoomBigIn', {\n '0%': {\n transform: 'scale(0.8)',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n opacity: 1\n }\n});\nexport const zoomBigOut = new Keyframes('antZoomBigOut', {\n '0%': {\n transform: 'scale(1)'\n },\n '100%': {\n transform: 'scale(0.8)',\n opacity: 0\n }\n});\nexport const zoomUpIn = new Keyframes('antZoomUpIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 0%',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '50% 0%'\n }\n});\nexport const zoomUpOut = new Keyframes('antZoomUpOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '50% 0%'\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 0%',\n opacity: 0\n }\n});\nexport const zoomLeftIn = new Keyframes('antZoomLeftIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '0% 50%',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '0% 50%'\n }\n});\nexport const zoomLeftOut = new Keyframes('antZoomLeftOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '0% 50%'\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '0% 50%',\n opacity: 0\n }\n});\nexport const zoomRightIn = new Keyframes('antZoomRightIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '100% 50%',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '100% 50%'\n }\n});\nexport const zoomRightOut = new Keyframes('antZoomRightOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '100% 50%'\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '100% 50%',\n opacity: 0\n }\n});\nexport const zoomDownIn = new Keyframes('antZoomDownIn', {\n '0%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 100%',\n opacity: 0\n },\n '100%': {\n transform: 'scale(1)',\n transformOrigin: '50% 100%'\n }\n});\nexport const zoomDownOut = new Keyframes('antZoomDownOut', {\n '0%': {\n transform: 'scale(1)',\n transformOrigin: '50% 100%'\n },\n '100%': {\n transform: 'scale(0.8)',\n transformOrigin: '50% 100%',\n opacity: 0\n }\n});\nconst zoomMotion = {\n zoom: {\n inKeyframes: zoomIn,\n outKeyframes: zoomOut\n },\n 'zoom-big': {\n inKeyframes: zoomBigIn,\n outKeyframes: zoomBigOut\n },\n 'zoom-big-fast': {\n inKeyframes: zoomBigIn,\n outKeyframes: zoomBigOut\n },\n 'zoom-left': {\n inKeyframes: zoomLeftIn,\n outKeyframes: zoomLeftOut\n },\n 'zoom-right': {\n inKeyframes: zoomRightIn,\n outKeyframes: zoomRightOut\n },\n 'zoom-up': {\n inKeyframes: zoomUpIn,\n outKeyframes: zoomUpOut\n },\n 'zoom-down': {\n inKeyframes: zoomDownIn,\n outKeyframes: zoomDownOut\n }\n};\nexport const initZoomMotion = (token, motionName) => {\n const {\n antCls\n } = token;\n const motionCls = `${antCls}-${motionName}`;\n const {\n inKeyframes,\n outKeyframes\n } = zoomMotion[motionName];\n return [initMotion(motionCls, inKeyframes, outKeyframes, motionName === 'zoom-big-fast' ? token.motionDurationFast : token.motionDurationMid), {\n [`\n ${motionCls}-enter,\n ${motionCls}-appear\n `]: {\n transform: 'scale(0)',\n opacity: 0,\n animationTimingFunction: token.motionEaseOutCirc,\n '&-prepare': {\n transform: 'none'\n }\n },\n [`${motionCls}-leave`]: {\n animationTimingFunction: token.motionEaseInOutCirc\n }\n }];\n};","export const roundedArrow = (width, innerRadius, outerRadius, bgColor, boxShadow) => {\n const unitWidth = width / 2;\n const ax = 0;\n const ay = unitWidth;\n const bx = outerRadius * 1 / Math.sqrt(2);\n const by = unitWidth - outerRadius * (1 - 1 / Math.sqrt(2));\n const cx = unitWidth - innerRadius * (1 / Math.sqrt(2));\n const cy = outerRadius * (Math.sqrt(2) - 1) + innerRadius * (1 / Math.sqrt(2));\n const dx = 2 * unitWidth - cx;\n const dy = cy;\n const ex = 2 * unitWidth - bx;\n const ey = by;\n const fx = 2 * unitWidth - ax;\n const fy = ay;\n const shadowWidth = unitWidth * Math.sqrt(2) + outerRadius * (Math.sqrt(2) - 2);\n return {\n borderRadius: {\n _skip_check_: true,\n value: `0 0 ${innerRadius}px`\n },\n pointerEvents: 'none',\n width,\n height: width,\n overflow: 'hidden',\n '&::before': {\n position: 'absolute',\n bottom: 0,\n insetInlineStart: 0,\n width,\n height: width / 2,\n background: bgColor,\n clipPath: `path('M ${ax} ${ay} A ${outerRadius} ${outerRadius} 0 0 0 ${bx} ${by} L ${cx} ${cy} A ${innerRadius} ${innerRadius} 0 0 1 ${dx} ${dy} L ${ex} ${ey} A ${outerRadius} ${outerRadius} 0 0 0 ${fx} ${fy} Z')`,\n content: '\"\"'\n },\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n width: shadowWidth,\n height: shadowWidth,\n bottom: 0,\n insetInline: 0,\n margin: 'auto',\n borderRadius: {\n _skip_check_: true,\n value: `0 0 ${innerRadius}px 0`\n },\n transform: 'translateY(50%) rotate(-135deg)',\n boxShadow,\n zIndex: 0,\n background: 'transparent'\n }\n };\n};","import { TinyColor } from '@ctrl/tinycolor';\nexport const getAlphaColor = (baseColor, alpha) => new TinyColor(baseColor).setAlpha(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n const instance = new TinyColor(baseColor);\n return instance.lighten(brightness).toHexString();\n};","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = baseColor => {\n const colors = generate(baseColor, {\n theme: 'dark'\n });\n return {\n 1: colors[0],\n 2: colors[1],\n 3: colors[2],\n 4: colors[3],\n 5: colors[6],\n 6: colors[5],\n 7: colors[4],\n 8: colors[6],\n 9: colors[5],\n 10: colors[4]\n // 8: colors[9],\n // 9: colors[8],\n // 10: colors[7],\n };\n};\n\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => {\n const colorBgBase = bgBaseColor || '#000';\n const colorTextBase = textBaseColor || '#fff';\n return {\n colorBgBase,\n colorTextBase,\n colorText: getAlphaColor(colorTextBase, 0.85),\n colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n colorFill: getAlphaColor(colorTextBase, 0.18),\n colorFillSecondary: getAlphaColor(colorTextBase, 0.12),\n colorFillTertiary: getAlphaColor(colorTextBase, 0.08),\n colorFillQuaternary: getAlphaColor(colorTextBase, 0.04),\n colorBgElevated: getSolidColor(colorBgBase, 12),\n colorBgContainer: getSolidColor(colorBgBase, 8),\n colorBgLayout: getSolidColor(colorBgBase, 0),\n colorBgSpotlight: getSolidColor(colorBgBase, 26),\n colorBorder: getSolidColor(colorBgBase, 26),\n colorBorderSecondary: getSolidColor(colorBgBase, 19)\n };\n};","import { generate } from '@ant-design/colors';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nimport defaultAlgorithm from '../default';\nconst derivative = (token, mapToken) => {\n const colorPalettes = Object.keys(defaultPresetColors).map(colorKey => {\n const colors = generate(token[colorKey], {\n theme: 'dark'\n });\n return new Array(10).fill(1).reduce((prev, _, i) => {\n prev[`${colorKey}-${i + 1}`] = colors[i];\n return prev;\n }, {});\n }).reduce((prev, cur) => {\n prev = Object.assign(Object.assign({}, prev), cur);\n return prev;\n }, {});\n const mergedMapToken = mapToken !== null && mapToken !== void 0 ? mapToken : defaultAlgorithm(token);\n return Object.assign(Object.assign(Object.assign({}, mergedMapToken), colorPalettes), genColorMapToken(token, {\n generateColorPalettes,\n generateNeutralColorPalettes\n }));\n};\nexport default derivative;","import genControlHeight from '../shared/genControlHeight';\nimport defaultAlgorithm from '../default';\nimport genCompactSizeMapToken from './genCompactSizeMapToken';\nimport genFontMapToken from '../shared/genFontMapToken';\nconst derivative = (token, mapToken) => {\n const mergedMapToken = mapToken !== null && mapToken !== void 0 ? mapToken : defaultAlgorithm(token);\n const fontSize = mergedMapToken.fontSizeSM; // Smaller size font-size as base\n const controlHeight = mergedMapToken.controlHeight - 4;\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, mergedMapToken), genCompactSizeMapToken(mapToken !== null && mapToken !== void 0 ? mapToken : token)), genFontMapToken(fontSize)), {\n // controlHeight\n controlHeight\n }), genControlHeight(Object.assign(Object.assign({}, mergedMapToken), {\n controlHeight\n })));\n};\nexport default derivative;","export default function genSizeMapToken(token) {\n const {\n sizeUnit,\n sizeStep\n } = token;\n const compactSizeStep = sizeStep - 2;\n return {\n sizeXXL: sizeUnit * (compactSizeStep + 10),\n sizeXL: sizeUnit * (compactSizeStep + 6),\n sizeLG: sizeUnit * (compactSizeStep + 2),\n sizeMD: sizeUnit * (compactSizeStep + 2),\n sizeMS: sizeUnit * (compactSizeStep + 1),\n size: sizeUnit * compactSizeStep,\n sizeSM: sizeUnit * compactSizeStep,\n sizeXS: sizeUnit * (compactSizeStep - 1),\n sizeXXS: sizeUnit * (compactSizeStep - 1)\n };\n}","/* eslint-disable import/prefer-default-export */\nimport { defaultConfig, useToken as useInternalToken } from './internal';\nimport defaultAlgorithm from './themes/default';\nimport darkAlgorithm from './themes/dark';\nimport compactAlgorithm from './themes/compact';\n// ZombieJ: We export as object to user but array in internal.\n// This is used to minimize the bundle size for antd package but safe to refactor as object also.\n// Please do not export internal `useToken` directly to avoid something export unexpected.\n/** Get current context Design Token. Will be different if you are using nest theme config. */\nfunction useToken() {\n const [theme, token, hashId] = useInternalToken();\n return {\n theme,\n token,\n hashId\n };\n}\nexport default {\n /** @private Test Usage. Do not use in production. */\n defaultConfig,\n /** Default seedToken */\n defaultSeed: defaultConfig.token,\n useToken,\n defaultAlgorithm,\n darkAlgorithm,\n compactAlgorithm\n};","export default '5.2.1';","/* eslint import/no-unresolved: 0 */\n// @ts-ignore\nimport version from './version';\nexport default version;","import { TinyColor } from '@ctrl/tinycolor';\nfunction isStableColor(color) {\n return color >= 0 && color <= 255;\n}\nfunction getAlphaColor(frontColor, backgroundColor) {\n const {\n r: fR,\n g: fG,\n b: fB,\n a: originAlpha\n } = new TinyColor(frontColor).toRgb();\n if (originAlpha < 1) {\n return frontColor;\n }\n const {\n r: bR,\n g: bG,\n b: bB\n } = new TinyColor(backgroundColor).toRgb();\n for (let fA = 0.01; fA <= 1; fA += 0.01) {\n const r = Math.round((fR - bR * (1 - fA)) / fA);\n const g = Math.round((fG - bG * (1 - fA)) / fA);\n const b = Math.round((fB - bB * (1 - fA)) / fA);\n if (isStableColor(r) && isStableColor(g) && isStableColor(b)) {\n return new TinyColor({\n r,\n g,\n b,\n a: Math.round(fA * 100) / 100\n }).toRgbString();\n }\n }\n // fallback\n /* istanbul ignore next */\n return new TinyColor({\n r: fR,\n g: fG,\n b: fB,\n a: 1\n }).toRgbString();\n}\nexport default getAlphaColor;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { TinyColor } from '@ctrl/tinycolor';\nimport getAlphaColor from './getAlphaColor';\nimport seedToken from '../themes/seed';\n/**\n * Seed (designer) > Derivative (designer) > Alias (developer).\n *\n * Merge seed & derivative & override token and generate alias token for developer.\n */\nexport default function formatToken(derivativeToken) {\n const {\n override\n } = derivativeToken,\n restToken = __rest(derivativeToken, [\"override\"]);\n const overrideTokens = Object.assign({}, override);\n Object.keys(seedToken).forEach(token => {\n delete overrideTokens[token];\n });\n const mergedToken = Object.assign(Object.assign({}, restToken), overrideTokens);\n const screenXS = 480;\n const screenSM = 576;\n const screenMD = 768;\n const screenLG = 992;\n const screenXL = 1200;\n const screenXXL = 1600;\n // Generate alias token\n const aliasToken = Object.assign(Object.assign(Object.assign({}, mergedToken), {\n colorLink: mergedToken.colorInfoText,\n colorLinkHover: mergedToken.colorInfoHover,\n colorLinkActive: mergedToken.colorInfoActive,\n // ============== Background ============== //\n colorFillContent: mergedToken.colorFillSecondary,\n colorFillContentHover: mergedToken.colorFill,\n colorFillAlter: mergedToken.colorFillQuaternary,\n colorBgContainerDisabled: mergedToken.colorFillTertiary,\n // ============== Split ============== //\n colorBorderBg: mergedToken.colorBgContainer,\n colorSplit: getAlphaColor(mergedToken.colorBorderSecondary, mergedToken.colorBgContainer),\n // ============== Text ============== //\n colorTextPlaceholder: mergedToken.colorTextQuaternary,\n colorTextDisabled: mergedToken.colorTextQuaternary,\n colorTextHeading: mergedToken.colorText,\n colorTextLabel: mergedToken.colorTextSecondary,\n colorTextDescription: mergedToken.colorTextTertiary,\n colorTextLightSolid: mergedToken.colorWhite,\n colorHighlight: mergedToken.colorError,\n colorBgTextHover: mergedToken.colorFillSecondary,\n colorBgTextActive: mergedToken.colorFill,\n colorIcon: mergedToken.colorTextTertiary,\n colorIconHover: mergedToken.colorText,\n colorErrorOutline: getAlphaColor(mergedToken.colorErrorBg, mergedToken.colorBgContainer),\n colorWarningOutline: getAlphaColor(mergedToken.colorWarningBg, mergedToken.colorBgContainer),\n // Font\n fontSizeIcon: mergedToken.fontSizeSM,\n // Control\n lineWidth: mergedToken.lineWidth,\n controlOutlineWidth: mergedToken.lineWidth * 2,\n // Checkbox size and expand icon size\n controlInteractiveSize: mergedToken.controlHeight / 2,\n controlItemBgHover: mergedToken.colorFillTertiary,\n controlItemBgActive: mergedToken.colorPrimaryBg,\n controlItemBgActiveHover: mergedToken.colorPrimaryBgHover,\n controlItemBgActiveDisabled: mergedToken.colorFill,\n controlTmpOutline: mergedToken.colorFillQuaternary,\n controlOutline: getAlphaColor(mergedToken.colorPrimaryBg, mergedToken.colorBgContainer),\n lineType: mergedToken.lineType,\n borderRadius: mergedToken.borderRadius,\n borderRadiusXS: mergedToken.borderRadiusXS,\n borderRadiusSM: mergedToken.borderRadiusSM,\n borderRadiusLG: mergedToken.borderRadiusLG,\n fontWeightStrong: 600,\n opacityLoading: 0.65,\n linkDecoration: 'none',\n linkHoverDecoration: 'none',\n linkFocusDecoration: 'none',\n controlPaddingHorizontal: 12,\n controlPaddingHorizontalSM: 8,\n paddingXXS: mergedToken.sizeXXS,\n paddingXS: mergedToken.sizeXS,\n paddingSM: mergedToken.sizeSM,\n padding: mergedToken.size,\n paddingMD: mergedToken.sizeMD,\n paddingLG: mergedToken.sizeLG,\n paddingXL: mergedToken.sizeXL,\n paddingContentHorizontalLG: mergedToken.sizeLG,\n paddingContentVerticalLG: mergedToken.sizeMS,\n paddingContentHorizontal: mergedToken.sizeMS,\n paddingContentVertical: mergedToken.sizeSM,\n paddingContentHorizontalSM: mergedToken.size,\n paddingContentVerticalSM: mergedToken.sizeXS,\n marginXXS: mergedToken.sizeXXS,\n marginXS: mergedToken.sizeXS,\n marginSM: mergedToken.sizeSM,\n margin: mergedToken.size,\n marginMD: mergedToken.sizeMD,\n marginLG: mergedToken.sizeLG,\n marginXL: mergedToken.sizeXL,\n marginXXL: mergedToken.sizeXXL,\n boxShadow: `\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowSecondary: `\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowTertiary: `\n 0 1px 2px 0 rgba(0, 0, 0, 0.03),\n 0 1px 6px -1px rgba(0, 0, 0, 0.02),\n 0 2px 4px 0 rgba(0, 0, 0, 0.02)\n `,\n screenXS,\n screenXSMin: screenXS,\n screenXSMax: screenSM - 1,\n screenSM,\n screenSMMin: screenSM,\n screenSMMax: screenMD - 1,\n screenMD,\n screenMDMin: screenMD,\n screenMDMax: screenLG - 1,\n screenLG,\n screenLGMin: screenLG,\n screenLGMax: screenXL - 1,\n screenXL,\n screenXLMin: screenXL,\n screenXLMax: screenXXL - 1,\n screenXXL,\n screenXXLMin: screenXXL,\n boxShadowPopoverArrow: '2px 2px 5px rgba(0, 0, 0, 0.05)',\n boxShadowCard: `\n 0 1px 2px -2px ${new TinyColor('rgba(0, 0, 0, 0.16)').toRgbString()},\n 0 3px 6px 0 ${new TinyColor('rgba(0, 0, 0, 0.12)').toRgbString()},\n 0 5px 12px 4px ${new TinyColor('rgba(0, 0, 0, 0.09)').toRgbString()}\n `,\n boxShadowDrawerRight: `\n -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowDrawerLeft: `\n 6px 0 16px 0 rgba(0, 0, 0, 0.08),\n 3px 0 6px -4px rgba(0, 0, 0, 0.12),\n 9px 0 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowDrawerUp: `\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowDrawerDown: `\n 0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n `,\n boxShadowTabsOverflowLeft: 'inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n boxShadowTabsOverflowRight: 'inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)',\n boxShadowTabsOverflowTop: 'inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)',\n boxShadowTabsOverflowBottom: 'inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)'\n }), overrideTokens);\n return aliasToken;\n}","import { createTheme, useCacheToken, useStyleRegister } from '@ant-design/cssinjs';\nimport React from 'react';\nimport version from '../version';\nimport { PresetColors } from './interface';\nimport defaultDerivative from './themes/default';\nimport defaultSeedToken from './themes/seed';\nimport formatToken from './util/alias';\nimport genComponentStyleHook from './util/genComponentStyleHook';\nimport statisticToken, { merge as mergeToken, statistic } from './util/statistic';\nconst defaultTheme = createTheme(defaultDerivative);\nexport {\n// colors\nPresetColors,\n// Statistic\nstatistic, statisticToken, mergeToken,\n// hooks\nuseStyleRegister, genComponentStyleHook };\n// ================================ Context =================================\n// To ensure snapshot stable. We disable hashed in test env.\nexport const defaultConfig = {\n token: defaultSeedToken,\n hashed: true\n};\nexport const DesignTokenContext = /*#__PURE__*/React.createContext(defaultConfig);\n// ================================== Hook ==================================\nexport function useToken() {\n const {\n token: rootDesignToken,\n hashed,\n theme,\n components\n } = React.useContext(DesignTokenContext);\n const salt = `${version}-${hashed || ''}`;\n const mergedTheme = theme || defaultTheme;\n const [token, hashId] = useCacheToken(mergedTheme, [defaultSeedToken, rootDesignToken], {\n salt,\n override: Object.assign({\n override: rootDesignToken\n }, components),\n formatToken\n });\n return [mergedTheme, token, hashed ? hashId : ''];\n}","const genRadius = radiusBase => {\n let radiusLG = radiusBase;\n let radiusSM = radiusBase;\n let radiusXS = radiusBase;\n let radiusOuter = radiusBase;\n // radiusLG\n if (radiusBase < 6 && radiusBase >= 5) {\n radiusLG = radiusBase + 1;\n } else if (radiusBase < 16 && radiusBase >= 6) {\n radiusLG = radiusBase + 2;\n } else if (radiusBase >= 16) {\n radiusLG = 16;\n }\n // radiusSM\n if (radiusBase < 7 && radiusBase >= 5) {\n radiusSM = 4;\n } else if (radiusBase < 8 && radiusBase >= 7) {\n radiusSM = 5;\n } else if (radiusBase < 14 && radiusBase >= 8) {\n radiusSM = 6;\n } else if (radiusBase < 16 && radiusBase >= 14) {\n radiusSM = 7;\n } else if (radiusBase >= 16) {\n radiusSM = 8;\n }\n // radiusXS\n if (radiusBase < 6 && radiusBase >= 2) {\n radiusXS = 1;\n } else if (radiusBase >= 6) {\n radiusXS = 2;\n }\n // radiusOuter\n if (radiusBase > 4 && radiusBase < 8) {\n radiusOuter = 4;\n } else if (radiusBase >= 8) {\n radiusOuter = 6;\n }\n return {\n borderRadius: radiusBase > 16 ? 16 : radiusBase,\n borderRadiusXS: radiusXS,\n borderRadiusSM: radiusSM,\n borderRadiusLG: radiusLG,\n borderRadiusOuter: radiusOuter\n };\n};\nexport default genRadius;","import { TinyColor } from '@ctrl/tinycolor';\nexport const getAlphaColor = (baseColor, alpha) => new TinyColor(baseColor).setAlpha(alpha).toRgbString();\nexport const getSolidColor = (baseColor, brightness) => {\n const instance = new TinyColor(baseColor);\n return instance.darken(brightness).toHexString();\n};","import { generate } from '@ant-design/colors';\nimport { getAlphaColor, getSolidColor } from './colorAlgorithm';\nexport const generateColorPalettes = baseColor => {\n const colors = generate(baseColor);\n return {\n 1: colors[0],\n 2: colors[1],\n 3: colors[2],\n 4: colors[3],\n 5: colors[4],\n 6: colors[5],\n 7: colors[6],\n 8: colors[4],\n 9: colors[5],\n 10: colors[6]\n // 8: colors[7],\n // 9: colors[8],\n // 10: colors[9],\n };\n};\n\nexport const generateNeutralColorPalettes = (bgBaseColor, textBaseColor) => {\n const colorBgBase = bgBaseColor || '#fff';\n const colorTextBase = textBaseColor || '#000';\n return {\n colorBgBase,\n colorTextBase,\n colorText: getAlphaColor(colorTextBase, 0.88),\n colorTextSecondary: getAlphaColor(colorTextBase, 0.65),\n colorTextTertiary: getAlphaColor(colorTextBase, 0.45),\n colorTextQuaternary: getAlphaColor(colorTextBase, 0.25),\n colorFill: getAlphaColor(colorTextBase, 0.15),\n colorFillSecondary: getAlphaColor(colorTextBase, 0.06),\n colorFillTertiary: getAlphaColor(colorTextBase, 0.04),\n colorFillQuaternary: getAlphaColor(colorTextBase, 0.02),\n colorBgLayout: getSolidColor(colorBgBase, 4),\n colorBgContainer: getSolidColor(colorBgBase, 0),\n colorBgElevated: getSolidColor(colorBgBase, 0),\n colorBgSpotlight: getAlphaColor(colorTextBase, 0.85),\n colorBorder: getSolidColor(colorBgBase, 15),\n colorBorderSecondary: getSolidColor(colorBgBase, 6)\n };\n};","import { generate } from '@ant-design/colors';\nimport genControlHeight from '../shared/genControlHeight';\nimport genSizeMapToken from '../shared/genSizeMapToken';\nimport { defaultPresetColors } from '../seed';\nimport genColorMapToken from '../shared/genColorMapToken';\nimport genCommonMapToken from '../shared/genCommonMapToken';\nimport { generateColorPalettes, generateNeutralColorPalettes } from './colors';\nimport genFontMapToken from '../shared/genFontMapToken';\nexport default function derivative(token) {\n const colorPalettes = Object.keys(defaultPresetColors).map(colorKey => {\n const colors = generate(token[colorKey]);\n return new Array(10).fill(1).reduce((prev, _, i) => {\n prev[`${colorKey}-${i + 1}`] = colors[i];\n return prev;\n }, {});\n }).reduce((prev, cur) => {\n prev = Object.assign(Object.assign({}, prev), cur);\n return prev;\n }, {});\n return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, token), colorPalettes), genColorMapToken(token, {\n generateColorPalettes,\n generateNeutralColorPalettes\n })), genFontMapToken(token.fontSize)), genSizeMapToken(token)), genControlHeight(token)), genCommonMapToken(token));\n}","export default function genSizeMapToken(token) {\n const {\n sizeUnit,\n sizeStep\n } = token;\n return {\n sizeXXL: sizeUnit * (sizeStep + 8),\n sizeXL: sizeUnit * (sizeStep + 4),\n sizeLG: sizeUnit * (sizeStep + 2),\n sizeMD: sizeUnit * (sizeStep + 1),\n sizeMS: sizeUnit * sizeStep,\n size: sizeUnit * sizeStep,\n sizeSM: sizeUnit * (sizeStep - 1),\n sizeXS: sizeUnit * (sizeStep - 2),\n sizeXXS: sizeUnit * (sizeStep - 3) // 4\n };\n}","import genRadius from './genRadius';\nexport default function genCommonMapToken(token) {\n const {\n motionUnit,\n motionBase,\n borderRadius,\n lineWidth\n } = token;\n return Object.assign({\n // motion\n motionDurationFast: `${(motionBase + motionUnit).toFixed(1)}s`,\n motionDurationMid: `${(motionBase + motionUnit * 2).toFixed(1)}s`,\n motionDurationSlow: `${(motionBase + motionUnit * 3).toFixed(1)}s`,\n // line\n lineWidthBold: lineWidth + 1\n }, genRadius(borderRadius));\n}","export const defaultPresetColors = {\n blue: '#1677ff',\n purple: '#722ED1',\n cyan: '#13C2C2',\n green: '#52C41A',\n magenta: '#EB2F96',\n pink: '#eb2f96',\n red: '#F5222D',\n orange: '#FA8C16',\n yellow: '#FADB14',\n volcano: '#FA541C',\n geekblue: '#2F54EB',\n gold: '#FAAD14',\n lime: '#A0D911'\n};\nconst seedToken = Object.assign(Object.assign({}, defaultPresetColors), {\n // Color\n colorPrimary: '#1677ff',\n colorSuccess: '#52c41a',\n colorWarning: '#faad14',\n colorError: '#ff4d4f',\n colorInfo: '#1677ff',\n colorTextBase: '',\n colorBgBase: '',\n // Font\n fontFamily: `-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'`,\n fontFamilyCode: `'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace`,\n fontSize: 14,\n // Line\n lineWidth: 1,\n lineType: 'solid',\n // Motion\n motionUnit: 0.1,\n motionBase: 0,\n motionEaseOutCirc: 'cubic-bezier(0.08, 0.82, 0.17, 1)',\n motionEaseInOutCirc: 'cubic-bezier(0.78, 0.14, 0.15, 0.86)',\n motionEaseOut: 'cubic-bezier(0.215, 0.61, 0.355, 1)',\n motionEaseInOut: 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n motionEaseOutBack: 'cubic-bezier(0.12, 0.4, 0.29, 1.46)',\n motionEaseInBack: 'cubic-bezier(0.71, -0.46, 0.88, 0.6)',\n motionEaseInQuint: 'cubic-bezier(0.755, 0.05, 0.855, 0.06)',\n motionEaseOutQuint: 'cubic-bezier(0.23, 1, 0.32, 1)',\n // Radius\n borderRadius: 6,\n // Size\n sizeUnit: 4,\n sizeStep: 4,\n sizePopupArrow: 16,\n // Control Base\n controlHeight: 32,\n // zIndex\n zIndexBase: 0,\n zIndexPopupBase: 1000,\n // Image\n opacityImage: 1,\n // Wireframe\n wireframe: false\n});\nexport default seedToken;","import { TinyColor } from '@ctrl/tinycolor';\nexport default function genColorMapToken(seed, _ref) {\n let {\n generateColorPalettes,\n generateNeutralColorPalettes\n } = _ref;\n const {\n colorSuccess: colorSuccessBase,\n colorWarning: colorWarningBase,\n colorError: colorErrorBase,\n colorInfo: colorInfoBase,\n colorPrimary: colorPrimaryBase,\n colorBgBase,\n colorTextBase\n } = seed;\n const primaryColors = generateColorPalettes(colorPrimaryBase);\n const successColors = generateColorPalettes(colorSuccessBase);\n const warningColors = generateColorPalettes(colorWarningBase);\n const errorColors = generateColorPalettes(colorErrorBase);\n const infoColors = generateColorPalettes(colorInfoBase);\n const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase);\n return Object.assign(Object.assign({}, neutralColors), {\n colorPrimaryBg: primaryColors[1],\n colorPrimaryBgHover: primaryColors[2],\n colorPrimaryBorder: primaryColors[3],\n colorPrimaryBorderHover: primaryColors[4],\n colorPrimaryHover: primaryColors[5],\n colorPrimary: primaryColors[6],\n colorPrimaryActive: primaryColors[7],\n colorPrimaryTextHover: primaryColors[8],\n colorPrimaryText: primaryColors[9],\n colorPrimaryTextActive: primaryColors[10],\n colorSuccessBg: successColors[1],\n colorSuccessBgHover: successColors[2],\n colorSuccessBorder: successColors[3],\n colorSuccessBorderHover: successColors[4],\n colorSuccessHover: successColors[4],\n colorSuccess: successColors[6],\n colorSuccessActive: successColors[7],\n colorSuccessTextHover: successColors[8],\n colorSuccessText: successColors[9],\n colorSuccessTextActive: successColors[10],\n colorErrorBg: errorColors[1],\n colorErrorBgHover: errorColors[2],\n colorErrorBorder: errorColors[3],\n colorErrorBorderHover: errorColors[4],\n colorErrorHover: errorColors[5],\n colorError: errorColors[6],\n colorErrorActive: errorColors[7],\n colorErrorTextHover: errorColors[8],\n colorErrorText: errorColors[9],\n colorErrorTextActive: errorColors[10],\n colorWarningBg: warningColors[1],\n colorWarningBgHover: warningColors[2],\n colorWarningBorder: warningColors[3],\n colorWarningBorderHover: warningColors[4],\n colorWarningHover: warningColors[4],\n colorWarning: warningColors[6],\n colorWarningActive: warningColors[7],\n colorWarningTextHover: warningColors[8],\n colorWarningText: warningColors[9],\n colorWarningTextActive: warningColors[10],\n colorInfoBg: infoColors[1],\n colorInfoBgHover: infoColors[2],\n colorInfoBorder: infoColors[3],\n colorInfoBorderHover: infoColors[4],\n colorInfoHover: infoColors[4],\n colorInfo: infoColors[6],\n colorInfoActive: infoColors[7],\n colorInfoTextHover: infoColors[8],\n colorInfoText: infoColors[9],\n colorInfoTextActive: infoColors[10],\n colorBgMask: new TinyColor('#000').setAlpha(0.45).toRgbString(),\n colorWhite: '#fff'\n });\n}","const genControlHeight = token => {\n const {\n controlHeight\n } = token;\n return {\n controlHeightSM: controlHeight * 0.75,\n controlHeightXS: controlHeight * 0.5,\n controlHeightLG: controlHeight * 1.25\n };\n};\nexport default genControlHeight;","import genFontSizes from './genFontSizes';\nconst genFontMapToken = fontSize => {\n const fontSizePairs = genFontSizes(fontSize);\n const fontSizes = fontSizePairs.map(pair => pair.size);\n const lineHeights = fontSizePairs.map(pair => pair.lineHeight);\n return {\n fontSizeSM: fontSizes[0],\n fontSize: fontSizes[1],\n fontSizeLG: fontSizes[2],\n fontSizeXL: fontSizes[3],\n fontSizeHeading1: fontSizes[6],\n fontSizeHeading2: fontSizes[5],\n fontSizeHeading3: fontSizes[4],\n fontSizeHeading4: fontSizes[3],\n fontSizeHeading5: fontSizes[2],\n lineHeight: lineHeights[1],\n lineHeightLG: lineHeights[2],\n lineHeightSM: lineHeights[0],\n lineHeightHeading1: lineHeights[6],\n lineHeightHeading2: lineHeights[5],\n lineHeightHeading3: lineHeights[4],\n lineHeightHeading4: lineHeights[3],\n lineHeightHeading5: lineHeights[2]\n };\n};\nexport default genFontMapToken;","// https://zhuanlan.zhihu.com/p/32746810\nexport default function getFontSizes(base) {\n const fontSizes = new Array(10).fill(null).map((_, index) => {\n const i = index - 1;\n const baseSize = base * Math.pow(2.71828, i / 5);\n const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize);\n // Convert to even\n return Math.floor(intSize / 2) * 2;\n });\n fontSizes[1] = base;\n return fontSizes.map(size => {\n const height = size + 8;\n return {\n size,\n lineHeight: height / size\n };\n });\n}","import { useStyleRegister } from '@ant-design/cssinjs';\nimport { useContext } from 'react';\nimport { genCommonStyle, genLinkStyle } from '../../style';\nimport { ConfigContext } from '../../config-provider/context';\nimport { mergeToken, statisticToken, useToken } from '../internal';\nexport default function genComponentStyleHook(component, styleFn, getDefaultToken) {\n return prefixCls => {\n const [theme, token, hashId] = useToken();\n const {\n getPrefixCls,\n iconPrefixCls\n } = useContext(ConfigContext);\n const rootPrefixCls = getPrefixCls();\n // Generate style for all a tags in antd component.\n useStyleRegister({\n theme,\n token,\n hashId,\n path: ['Shared', rootPrefixCls]\n }, () => [{\n // Link\n '&': genLinkStyle(token)\n }]);\n return [useStyleRegister({\n theme,\n token,\n hashId,\n path: [component, prefixCls, iconPrefixCls]\n }, () => {\n const {\n token: proxyToken,\n flush\n } = statisticToken(token);\n const defaultComponentToken = typeof getDefaultToken === 'function' ? getDefaultToken(proxyToken) : getDefaultToken;\n const mergedComponentToken = Object.assign(Object.assign({}, defaultComponentToken), token[component]);\n const componentCls = `.${prefixCls}`;\n const mergedToken = mergeToken(proxyToken, {\n componentCls,\n prefixCls,\n iconCls: `.${iconPrefixCls}`,\n antCls: `.${rootPrefixCls}`\n }, mergedComponentToken);\n const styleInterpolation = styleFn(mergedToken, {\n hashId,\n prefixCls,\n rootPrefixCls,\n iconPrefixCls,\n overrideComponentToken: token[component]\n });\n flush(component, mergedComponentToken);\n return [genCommonStyle(token, prefixCls), styleInterpolation];\n }), hashId];\n };\n}","const enableStatistic = process.env.NODE_ENV !== 'production' || typeof CSSINJS_STATISTIC !== 'undefined';\nlet recording = true;\n/**\n * This function will do as `Object.assign` in production. But will use Object.defineProperty:get to\n * pass all value access in development. To support statistic field usage with alias token.\n */\nexport function merge() {\n for (var _len = arguments.length, objs = new Array(_len), _key = 0; _key < _len; _key++) {\n objs[_key] = arguments[_key];\n }\n /* istanbul ignore next */\n if (!enableStatistic) {\n return Object.assign.apply(Object, [{}].concat(objs));\n }\n recording = false;\n const ret = {};\n objs.forEach(obj => {\n const keys = Object.keys(obj);\n keys.forEach(key => {\n Object.defineProperty(ret, key, {\n configurable: true,\n enumerable: true,\n get: () => obj[key]\n });\n });\n });\n recording = true;\n return ret;\n}\n/** @private Internal Usage. Not use in your production. */\nexport const statistic = {};\n/** @private Internal Usage. Not use in your production. */\n// eslint-disable-next-line camelcase\nexport const _statistic_build_ = {};\n/* istanbul ignore next */\nfunction noop() {}\n/** Statistic token usage case. Should use `merge` function if you do not want spread record. */\nexport default function statisticToken(token) {\n let tokenKeys;\n let proxy = token;\n let flush = noop;\n if (enableStatistic) {\n tokenKeys = new Set();\n proxy = new Proxy(token, {\n get(obj, prop) {\n if (recording) {\n tokenKeys.add(prop);\n }\n return obj[prop];\n }\n });\n flush = (componentName, componentToken) => {\n statistic[componentName] = {\n global: Array.from(tokenKeys),\n component: componentToken\n };\n };\n }\n return {\n token: proxy,\n keys: tokenKeys,\n flush\n };\n}","const locale = {\n placeholder: 'Select time',\n rangePlaceholder: ['Start time', 'End time']\n};\nexport default locale;","var autoAdjustOverflow = {\n adjustX: 1,\n adjustY: 1\n};\nvar targetOffset = [0, 0];\nexport var placements = {\n left: {\n points: ['cr', 'cl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n right: {\n points: ['cl', 'cr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n top: {\n points: ['bc', 'tc'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n bottom: {\n points: ['tc', 'bc'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n topLeft: {\n points: ['bl', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n leftTop: {\n points: ['tr', 'tl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n },\n topRight: {\n points: ['br', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [0, -4],\n targetOffset: targetOffset\n },\n rightTop: {\n points: ['tl', 'tr'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomRight: {\n points: ['tr', 'br'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n rightBottom: {\n points: ['bl', 'br'],\n overflow: autoAdjustOverflow,\n offset: [4, 0],\n targetOffset: targetOffset\n },\n bottomLeft: {\n points: ['tl', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [0, 4],\n targetOffset: targetOffset\n },\n leftBottom: {\n points: ['br', 'bl'],\n overflow: autoAdjustOverflow,\n offset: [-4, 0],\n targetOffset: targetOffset\n }\n};\nexport default placements;","import * as React from 'react';\nimport classNames from 'classnames';\nexport default function Popup(props) {\n var showArrow = props.showArrow,\n arrowContent = props.arrowContent,\n children = props.children,\n prefixCls = props.prefixCls,\n id = props.id,\n overlayInnerStyle = props.overlayInnerStyle,\n className = props.className,\n style = props.style;\n return /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(\"\".concat(prefixCls, \"-content\"), className),\n style: style\n }, showArrow !== false && /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-arrow\"),\n key: \"arrow\"\n }, arrowContent), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-inner\"),\n id: id,\n role: \"tooltip\",\n style: overlayInnerStyle\n }, typeof children === 'function' ? children() : children));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"overlayClassName\", \"trigger\", \"mouseEnterDelay\", \"mouseLeaveDelay\", \"overlayStyle\", \"prefixCls\", \"children\", \"onVisibleChange\", \"afterVisibleChange\", \"transitionName\", \"animation\", \"motion\", \"placement\", \"align\", \"destroyTooltipOnHide\", \"defaultVisible\", \"getTooltipContainer\", \"overlayInnerStyle\", \"arrowContent\", \"overlay\", \"id\", \"showArrow\"];\nimport * as React from 'react';\nimport { useRef, useImperativeHandle, forwardRef } from 'react';\nimport Trigger from 'rc-trigger';\nimport { placements } from './placements';\nimport Popup from './Popup';\nvar Tooltip = function Tooltip(props, ref) {\n var overlayClassName = props.overlayClassName,\n _props$trigger = props.trigger,\n trigger = _props$trigger === void 0 ? ['hover'] : _props$trigger,\n _props$mouseEnterDela = props.mouseEnterDelay,\n mouseEnterDelay = _props$mouseEnterDela === void 0 ? 0 : _props$mouseEnterDela,\n _props$mouseLeaveDela = props.mouseLeaveDelay,\n mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela,\n overlayStyle = props.overlayStyle,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-tooltip' : _props$prefixCls,\n children = props.children,\n onVisibleChange = props.onVisibleChange,\n afterVisibleChange = props.afterVisibleChange,\n transitionName = props.transitionName,\n animation = props.animation,\n motion = props.motion,\n _props$placement = props.placement,\n placement = _props$placement === void 0 ? 'right' : _props$placement,\n _props$align = props.align,\n align = _props$align === void 0 ? {} : _props$align,\n _props$destroyTooltip = props.destroyTooltipOnHide,\n destroyTooltipOnHide = _props$destroyTooltip === void 0 ? false : _props$destroyTooltip,\n defaultVisible = props.defaultVisible,\n getTooltipContainer = props.getTooltipContainer,\n overlayInnerStyle = props.overlayInnerStyle,\n arrowContent = props.arrowContent,\n overlay = props.overlay,\n id = props.id,\n _props$showArrow = props.showArrow,\n showArrow = _props$showArrow === void 0 ? true : _props$showArrow,\n restProps = _objectWithoutProperties(props, _excluded);\n var domRef = useRef(null);\n useImperativeHandle(ref, function () {\n return domRef.current;\n });\n var extraProps = _objectSpread({}, restProps);\n if ('visible' in props) {\n extraProps.popupVisible = props.visible;\n }\n var getPopupElement = function getPopupElement() {\n return /*#__PURE__*/React.createElement(Popup, {\n showArrow: showArrow,\n arrowContent: arrowContent,\n key: \"content\",\n prefixCls: prefixCls,\n id: id,\n overlayInnerStyle: overlayInnerStyle\n }, overlay);\n };\n var destroyTooltip = false;\n var autoDestroy = false;\n if (typeof destroyTooltipOnHide === 'boolean') {\n destroyTooltip = destroyTooltipOnHide;\n } else if (destroyTooltipOnHide && _typeof(destroyTooltipOnHide) === 'object') {\n var keepParent = destroyTooltipOnHide.keepParent;\n destroyTooltip = keepParent === true;\n autoDestroy = keepParent === false;\n }\n return /*#__PURE__*/React.createElement(Trigger, _extends({\n popupClassName: overlayClassName,\n prefixCls: prefixCls,\n popup: getPopupElement,\n action: trigger,\n builtinPlacements: placements,\n popupPlacement: placement,\n ref: domRef,\n popupAlign: align,\n getPopupContainer: getTooltipContainer,\n onPopupVisibleChange: onVisibleChange,\n afterPopupVisibleChange: afterVisibleChange,\n popupTransitionName: transitionName,\n popupAnimation: animation,\n popupMotion: motion,\n defaultPopupVisible: defaultVisible,\n destroyPopupOnHide: destroyTooltip,\n autoDestroy: autoDestroy,\n mouseLeaveDelay: mouseLeaveDelay,\n popupStyle: overlayStyle,\n mouseEnterDelay: mouseEnterDelay\n }, extraProps), children);\n};\nexport default /*#__PURE__*/forwardRef(Tooltip);","import Tooltip from './Tooltip';\nimport Popup from './Popup';\nexport { Popup };\nexport default Tooltip;","import { placements } from \"rc-tooltip/es/placements\";\nconst autoAdjustOverflowEnabled = {\n adjustX: 1,\n adjustY: 1\n};\nconst autoAdjustOverflowDisabled = {\n adjustX: 0,\n adjustY: 0\n};\nconst targetOffset = [0, 0];\nexport function getOverflowOptions(autoAdjustOverflow) {\n if (typeof autoAdjustOverflow === 'boolean') {\n return autoAdjustOverflow ? autoAdjustOverflowEnabled : autoAdjustOverflowDisabled;\n }\n return Object.assign(Object.assign({}, autoAdjustOverflowDisabled), autoAdjustOverflow);\n}\nfunction getArrowOffset(type, arrowWidth, offset) {\n switch (type) {\n case 'top':\n case 'topLeft':\n case 'topRight':\n return [0, -(arrowWidth / 2 + offset)];\n case 'bottom':\n case 'bottomLeft':\n case 'bottomRight':\n return [0, arrowWidth / 2 + offset];\n case 'left':\n case 'leftTop':\n case 'leftBottom':\n return [-(arrowWidth / 2 + offset), 0];\n case 'right':\n case 'rightTop':\n case 'rightBottom':\n return [arrowWidth / 2 + offset, 0];\n /* istanbul ignore next */\n default:\n return [0, 0];\n }\n}\nfunction vertexCalc(point1, point2) {\n return [point1[0] + point2[0], point1[1] + point2[1]];\n}\nexport default function getPlacements(config) {\n const {\n arrowWidth,\n horizontalArrowShift = 16,\n verticalArrowShift = 8,\n autoAdjustOverflow,\n arrowPointAtCenter,\n offset\n } = config;\n const halfArrowWidth = arrowWidth / 2;\n const placementMap = {\n left: {\n points: ['cr', 'cl'],\n offset: [-offset, 0]\n },\n right: {\n points: ['cl', 'cr'],\n offset: [offset, 0]\n },\n top: {\n points: ['bc', 'tc'],\n offset: [0, -offset]\n },\n bottom: {\n points: ['tc', 'bc'],\n offset: [0, offset]\n },\n topLeft: {\n points: ['bl', 'tc'],\n offset: [-(horizontalArrowShift + halfArrowWidth), -offset]\n },\n leftTop: {\n points: ['tr', 'cl'],\n offset: [-offset, -(verticalArrowShift + halfArrowWidth)]\n },\n topRight: {\n points: ['br', 'tc'],\n offset: [horizontalArrowShift + halfArrowWidth, -offset]\n },\n rightTop: {\n points: ['tl', 'cr'],\n offset: [offset, -(verticalArrowShift + halfArrowWidth)]\n },\n bottomRight: {\n points: ['tr', 'bc'],\n offset: [horizontalArrowShift + halfArrowWidth, offset]\n },\n rightBottom: {\n points: ['bl', 'cr'],\n offset: [offset, verticalArrowShift + halfArrowWidth]\n },\n bottomLeft: {\n points: ['tl', 'bc'],\n offset: [-(horizontalArrowShift + halfArrowWidth), offset]\n },\n leftBottom: {\n points: ['br', 'cl'],\n offset: [-offset, verticalArrowShift + halfArrowWidth]\n }\n };\n Object.keys(placementMap).forEach(key => {\n placementMap[key] = arrowPointAtCenter ? Object.assign(Object.assign({}, placementMap[key]), {\n offset: vertexCalc(placementMap[key].offset, getArrowOffset(key, arrowWidth, offset)),\n overflow: getOverflowOptions(autoAdjustOverflow),\n targetOffset\n }) : Object.assign(Object.assign({}, placements[key]), {\n offset: vertexCalc(placements[key].offset, getArrowOffset(key, arrowWidth, offset)),\n overflow: getOverflowOptions(autoAdjustOverflow)\n });\n placementMap[key].ignoreShake = true;\n });\n return placementMap;\n}","export const PresetColors = ['blue', 'purple', 'cyan', 'green', 'magenta', 'pink', 'red', 'orange', 'yellow', 'volcano', 'geekblue', 'lime', 'gold'];","import { PresetColors } from '../theme/internal';\nexport function genPresetColor(token, genCss) {\n return PresetColors.reduce((prev, colorKey) => {\n const lightColor = token[`${colorKey}-1`];\n const lightBorderColor = token[`${colorKey}-3`];\n const darkColor = token[`${colorKey}-6`];\n const textColor = token[`${colorKey}-7`];\n return Object.assign(Object.assign({}, prev), genCss(colorKey, {\n lightColor,\n lightBorderColor,\n darkColor,\n textColor\n }));\n }, {});\n}","import { roundedArrow } from './roundedArrow';\nexport const MAX_VERTICAL_CONTENT_RADIUS = 8;\nexport function getArrowOffset(options) {\n const maxVerticalContentRadius = MAX_VERTICAL_CONTENT_RADIUS;\n const {\n contentRadius,\n limitVerticalRadius\n } = options;\n const dropdownArrowOffset = contentRadius > 12 ? contentRadius + 2 : 12;\n const dropdownArrowOffsetVertical = limitVerticalRadius ? maxVerticalContentRadius : dropdownArrowOffset;\n return {\n dropdownArrowOffset,\n dropdownArrowOffsetVertical\n };\n}\nfunction isInject(valid, code) {\n if (!valid) return {};\n return code;\n}\nexport default function getArrowStyle(token, options) {\n const {\n componentCls,\n sizePopupArrow,\n borderRadiusXS,\n borderRadiusOuter,\n boxShadowPopoverArrow\n } = token;\n const {\n colorBg,\n contentRadius = token.borderRadiusLG,\n limitVerticalRadius,\n arrowDistance = 0,\n arrowPlacement = {\n left: true,\n right: true,\n top: true,\n bottom: true\n }\n } = options;\n const {\n dropdownArrowOffsetVertical,\n dropdownArrowOffset\n } = getArrowOffset({\n contentRadius,\n limitVerticalRadius\n });\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({\n // ============================ Basic ============================\n [`${componentCls}-arrow`]: [Object.assign(Object.assign({\n position: 'absolute',\n zIndex: 1,\n display: 'block'\n }, roundedArrow(sizePopupArrow, borderRadiusXS, borderRadiusOuter, colorBg, boxShadowPopoverArrow)), {\n '&:before': {\n background: colorBg\n }\n })]\n }, isInject(!!arrowPlacement.top, {\n [[`&-placement-top ${componentCls}-arrow`, `&-placement-topLeft ${componentCls}-arrow`, `&-placement-topRight ${componentCls}-arrow`].join(',')]: {\n bottom: arrowDistance,\n transform: 'translateY(100%) rotate(180deg)'\n },\n [`&-placement-top ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: '50%'\n },\n transform: 'translateX(-50%) translateY(100%) rotate(180deg)'\n },\n [`&-placement-topLeft ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: dropdownArrowOffset\n }\n },\n [`&-placement-topRight ${componentCls}-arrow`]: {\n right: {\n _skip_check_: true,\n value: dropdownArrowOffset\n }\n }\n })), isInject(!!arrowPlacement.bottom, {\n [[`&-placement-bottom ${componentCls}-arrow`, `&-placement-bottomLeft ${componentCls}-arrow`, `&-placement-bottomRight ${componentCls}-arrow`].join(',')]: {\n top: arrowDistance,\n transform: `translateY(-100%)`\n },\n [`&-placement-bottom ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: '50%'\n },\n transform: `translateX(-50%) translateY(-100%)`\n },\n [`&-placement-bottomLeft ${componentCls}-arrow`]: {\n left: {\n _skip_check_: true,\n value: dropdownArrowOffset\n }\n },\n [`&-placement-bottomRight ${componentCls}-arrow`]: {\n right: {\n _skip_check_: true,\n value: dropdownArrowOffset\n }\n }\n })), isInject(!!arrowPlacement.left, {\n [[`&-placement-left ${componentCls}-arrow`, `&-placement-leftTop ${componentCls}-arrow`, `&-placement-leftBottom ${componentCls}-arrow`].join(',')]: {\n right: {\n _skip_check_: true,\n value: arrowDistance\n },\n transform: 'translateX(100%) rotate(90deg)'\n },\n [`&-placement-left ${componentCls}-arrow`]: {\n top: {\n _skip_check_: true,\n value: '50%'\n },\n transform: 'translateY(-50%) translateX(100%) rotate(90deg)'\n },\n [`&-placement-leftTop ${componentCls}-arrow`]: {\n top: dropdownArrowOffsetVertical\n },\n [`&-placement-leftBottom ${componentCls}-arrow`]: {\n bottom: dropdownArrowOffsetVertical\n }\n })), isInject(!!arrowPlacement.right, {\n [[`&-placement-right ${componentCls}-arrow`, `&-placement-rightTop ${componentCls}-arrow`, `&-placement-rightBottom ${componentCls}-arrow`].join(',')]: {\n left: {\n _skip_check_: true,\n value: arrowDistance\n },\n transform: 'translateX(-100%) rotate(-90deg)'\n },\n [`&-placement-right ${componentCls}-arrow`]: {\n top: {\n _skip_check_: true,\n value: '50%'\n },\n transform: 'translateY(-50%) translateX(-100%) rotate(-90deg)'\n },\n [`&-placement-rightTop ${componentCls}-arrow`]: {\n top: dropdownArrowOffsetVertical\n },\n [`&-placement-rightBottom ${componentCls}-arrow`]: {\n bottom: dropdownArrowOffsetVertical\n }\n }))\n };\n}","import { initZoomMotion } from '../../style/motion';\nimport { genComponentStyleHook, mergeToken } from '../../theme/internal';\nimport { genPresetColor, resetComponent } from '../../style';\nimport getArrowStyle, { MAX_VERTICAL_CONTENT_RADIUS } from '../../style/placementArrow';\nconst genTooltipStyle = token => {\n const {\n componentCls,\n // ant-tooltip\n tooltipMaxWidth,\n tooltipColor,\n tooltipBg,\n tooltipBorderRadius,\n zIndexPopup,\n controlHeight,\n boxShadowSecondary,\n paddingSM,\n paddingXS,\n tooltipRadiusOuter\n } = token;\n return [{\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign({}, resetComponent(token)), {\n position: 'absolute',\n zIndex: zIndexPopup,\n display: 'block',\n '&': [{\n width: 'max-content'\n }, {\n width: 'intrinsic'\n }],\n maxWidth: tooltipMaxWidth,\n visibility: 'visible',\n '&-hidden': {\n display: 'none'\n },\n '--antd-arrow-background-color': tooltipBg,\n // Wrapper for the tooltip content\n [`${componentCls}-inner`]: {\n minWidth: controlHeight,\n minHeight: controlHeight,\n padding: `${paddingSM / 2}px ${paddingXS}px`,\n color: tooltipColor,\n textAlign: 'start',\n textDecoration: 'none',\n wordWrap: 'break-word',\n backgroundColor: tooltipBg,\n borderRadius: tooltipBorderRadius,\n boxShadow: boxShadowSecondary\n },\n // Limit left and right placement radius\n [[`&-placement-left`, `&-placement-leftTop`, `&-placement-leftBottom`, `&-placement-right`, `&-placement-rightTop`, `&-placement-rightBottom`].join(',')]: {\n [`${componentCls}-inner`]: {\n borderRadius: Math.min(tooltipBorderRadius, MAX_VERTICAL_CONTENT_RADIUS)\n }\n },\n [`${componentCls}-content`]: {\n position: 'relative'\n }\n }), genPresetColor(token, (colorKey, _ref) => {\n let {\n darkColor\n } = _ref;\n return {\n [`&${componentCls}-${colorKey}`]: {\n [`${componentCls}-inner`]: {\n backgroundColor: darkColor\n },\n [`${componentCls}-arrow`]: {\n '--antd-arrow-background-color': darkColor\n }\n }\n };\n })), {\n // RTL\n '&-rtl': {\n direction: 'rtl'\n }\n })\n },\n // Arrow Style\n getArrowStyle(mergeToken(token, {\n borderRadiusOuter: tooltipRadiusOuter\n }), {\n colorBg: 'var(--antd-arrow-background-color)',\n contentRadius: tooltipBorderRadius,\n limitVerticalRadius: true\n }),\n // Pure Render\n {\n [`${componentCls}-pure`]: {\n position: 'relative',\n maxWidth: 'none'\n }\n }];\n};\n// ============================== Export ==============================\nexport default ((prefixCls, injectStyle) => {\n const useOriginHook = genComponentStyleHook('Tooltip', token => {\n // Popover use Tooltip as internal component. We do not need to handle this.\n if (injectStyle === false) {\n return [];\n }\n const {\n borderRadius,\n colorTextLightSolid,\n colorBgDefault,\n borderRadiusOuter\n } = token;\n const TooltipToken = mergeToken(token, {\n // default variables\n tooltipMaxWidth: 250,\n tooltipColor: colorTextLightSolid,\n tooltipBorderRadius: borderRadius,\n tooltipBg: colorBgDefault,\n tooltipRadiusOuter: borderRadiusOuter > 4 ? 4 : borderRadiusOuter\n });\n return [genTooltipStyle(TooltipToken), initZoomMotion(token, 'zoom-big-fast')];\n }, _ref2 => {\n let {\n zIndexPopupBase,\n colorBgSpotlight\n } = _ref2;\n return {\n zIndexPopup: zIndexPopupBase + 70,\n colorBgDefault: colorBgSpotlight\n };\n });\n return useOriginHook(prefixCls);\n});","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport { PresetColors } from '../theme/interface';\nconst inverseColors = PresetColors.map(color => `${color}-inverse`);\nexport const PresetStatusColorTypes = ['success', 'processing', 'error', 'default', 'warning'];\n/**\n * determine if the color keyword belongs to the `Ant Design` {@link PresetColors}.\n * @param color color to be judged\n * @param includeInverse whether to include reversed colors\n */\nexport function isPresetColor(color) {\n let includeInverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n if (includeInverse) {\n return [].concat(_toConsumableArray(inverseColors), _toConsumableArray(PresetColors)).includes(color);\n }\n return PresetColors.includes(color);\n}\nexport function isPresetStatusColor(color) {\n return PresetStatusColorTypes.includes(color);\n}","/* eslint-disable import/prefer-default-export */\nimport classNames from 'classnames';\nimport { isPresetColor } from '../_util/colors';\nexport function parseColor(prefixCls, color) {\n const isInternalColor = isPresetColor(color);\n const className = classNames({\n [`${prefixCls}-${color}`]: color && isInternalColor\n });\n const overlayStyle = {};\n const arrowStyle = {};\n if (color && !isInternalColor) {\n overlayStyle.background = color;\n // @ts-ignore\n arrowStyle['--antd-arrow-background-color'] = color;\n }\n return {\n className,\n overlayStyle,\n arrowStyle\n };\n}","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport RcTooltip from 'rc-tooltip';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport { getTransitionName } from '../_util/motion';\nimport getPlacements from '../_util/placements';\nimport { cloneElement, isFragment, isValidElement } from '../_util/reactNode';\nimport warning from '../_util/warning';\nimport PurePanel from './PurePanel';\nimport useStyle from './style';\nimport { parseColor } from './util';\nimport theme from '../theme';\nconst {\n useToken\n} = theme;\nconst splitObject = (obj, keys) => {\n const picked = {};\n const omitted = Object.assign({}, obj);\n keys.forEach(key => {\n if (obj && key in obj) {\n picked[key] = obj[key];\n delete omitted[key];\n }\n });\n return {\n picked,\n omitted\n };\n};\n// Fix Tooltip won't hide at disabled button\n// mouse events don't trigger at disabled button in Chrome\n// https://github.com/react-component/tooltip/issues/18\nfunction getDisabledCompatibleChildren(element, prefixCls) {\n const elementType = element.type;\n if ((elementType.__ANT_BUTTON === true || element.type === 'button') && element.props.disabled || elementType.__ANT_SWITCH === true && (element.props.disabled || element.props.loading) || elementType.__ANT_RADIO === true && element.props.disabled) {\n // Pick some layout related style properties up to span\n // Prevent layout bugs like https://github.com/ant-design/ant-design/issues/5254\n const {\n picked,\n omitted\n } = splitObject(element.props.style, ['position', 'left', 'right', 'top', 'bottom', 'float', 'display', 'zIndex']);\n const spanStyle = Object.assign(Object.assign({\n display: 'inline-block'\n }, picked), {\n cursor: 'not-allowed',\n width: element.props.block ? '100%' : undefined\n });\n const buttonStyle = Object.assign(Object.assign({}, omitted), {\n pointerEvents: 'none'\n });\n const child = cloneElement(element, {\n style: buttonStyle,\n className: null\n });\n return /*#__PURE__*/React.createElement(\"span\", {\n style: spanStyle,\n className: classNames(element.props.className, `${prefixCls}-disabled-compatible-wrapper`)\n }, child);\n }\n return element;\n}\nconst Tooltip = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _a, _b;\n const {\n prefixCls: customizePrefixCls,\n openClassName,\n getTooltipContainer,\n overlayClassName,\n color,\n overlayInnerStyle,\n children,\n afterOpenChange,\n afterVisibleChange,\n arrow = true\n } = props;\n const mergedShowArrow = !!arrow;\n const {\n token\n } = useToken();\n const {\n getPopupContainer: getContextPopupContainer,\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n if (process.env.NODE_ENV !== 'production') {\n [['visible', 'open'], ['defaultVisible', 'defaultOpen'], ['onVisibleChange', 'onOpenChange'], ['afterVisibleChange', 'afterOpenChange'], ['arrowPointAtCenter', 'arrow']].forEach(_ref => {\n let [deprecatedName, newName] = _ref;\n process.env.NODE_ENV !== \"production\" ? warning(!(deprecatedName in props), 'Tooltip', `\\`${deprecatedName}\\` is deprecated, please use \\`${newName}\\` instead.`) : void 0;\n });\n }\n const [open, setOpen] = useMergedState(false, {\n value: (_a = props.open) !== null && _a !== void 0 ? _a : props.visible,\n defaultValue: (_b = props.defaultOpen) !== null && _b !== void 0 ? _b : props.defaultVisible\n });\n const isNoTitle = () => {\n const {\n title,\n overlay\n } = props;\n return !title && !overlay && title !== 0; // overlay for old version compatibility\n };\n\n const onOpenChange = vis => {\n var _a, _b;\n setOpen(isNoTitle() ? false : vis);\n if (!isNoTitle()) {\n (_a = props.onOpenChange) === null || _a === void 0 ? void 0 : _a.call(props, vis);\n (_b = props.onVisibleChange) === null || _b === void 0 ? void 0 : _b.call(props, vis);\n }\n };\n const getTooltipPlacements = () => {\n var _a;\n const {\n builtinPlacements,\n arrowPointAtCenter = false,\n autoAdjustOverflow = true\n } = props;\n const mergedArrowPointAtCenter = (_a = typeof arrow !== 'boolean' && (arrow === null || arrow === void 0 ? void 0 : arrow.arrowPointAtCenter)) !== null && _a !== void 0 ? _a : arrowPointAtCenter;\n return builtinPlacements || getPlacements({\n arrowPointAtCenter: mergedArrowPointAtCenter,\n autoAdjustOverflow,\n arrowWidth: mergedShowArrow ? token.sizePopupArrow : 0,\n offset: token.marginXXS\n });\n };\n // 动态设置动画点\n const onPopupAlign = (domNode, align) => {\n const placements = getTooltipPlacements();\n // 当前返回的位置\n const placement = Object.keys(placements).find(key => {\n var _a, _b;\n return placements[key].points[0] === ((_a = align.points) === null || _a === void 0 ? void 0 : _a[0]) && placements[key].points[1] === ((_b = align.points) === null || _b === void 0 ? void 0 : _b[1]);\n });\n if (placement) {\n // 根据当前坐标设置动画点\n const rect = domNode.getBoundingClientRect();\n const transformOrigin = {\n top: '50%',\n left: '50%'\n };\n if (/top|Bottom/.test(placement)) {\n transformOrigin.top = `${rect.height - align.offset[1]}px`;\n } else if (/Top|bottom/.test(placement)) {\n transformOrigin.top = `${-align.offset[1]}px`;\n }\n if (/left|Right/.test(placement)) {\n transformOrigin.left = `${rect.width - align.offset[0]}px`;\n } else if (/right|Left/.test(placement)) {\n transformOrigin.left = `${-align.offset[0]}px`;\n }\n domNode.style.transformOrigin = `${transformOrigin.left} ${transformOrigin.top}`;\n }\n };\n const getOverlay = () => {\n const {\n title,\n overlay\n } = props;\n if (title === 0) {\n return title;\n }\n return overlay || title || '';\n };\n const {\n getPopupContainer,\n placement = 'top',\n mouseEnterDelay = 0.1,\n mouseLeaveDelay = 0.1,\n overlayStyle,\n rootClassName\n } = props,\n otherProps = __rest(props, [\"getPopupContainer\", \"placement\", \"mouseEnterDelay\", \"mouseLeaveDelay\", \"overlayStyle\", \"rootClassName\"]);\n const prefixCls = getPrefixCls('tooltip', customizePrefixCls);\n const rootPrefixCls = getPrefixCls();\n const injectFromPopover = props['data-popover-inject'];\n let tempOpen = open;\n // Hide tooltip when there is no title\n if (!('open' in props) && !('visible' in props) && isNoTitle()) {\n tempOpen = false;\n }\n const child = getDisabledCompatibleChildren(isValidElement(children) && !isFragment(children) ? children : /*#__PURE__*/React.createElement(\"span\", null, children), prefixCls);\n const childProps = child.props;\n const childCls = !childProps.className || typeof childProps.className === 'string' ? classNames(childProps.className, {\n [openClassName || `${prefixCls}-open`]: true\n }) : childProps.className;\n // Style\n const [wrapSSR, hashId] = useStyle(prefixCls, !injectFromPopover);\n // Color\n const colorInfo = parseColor(prefixCls, color);\n const formattedOverlayInnerStyle = Object.assign(Object.assign({}, overlayInnerStyle), colorInfo.overlayStyle);\n const arrowContentStyle = colorInfo.arrowStyle;\n const customOverlayClassName = classNames(overlayClassName, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, colorInfo.className, rootClassName, hashId);\n return wrapSSR( /*#__PURE__*/React.createElement(RcTooltip, Object.assign({}, otherProps, {\n showArrow: mergedShowArrow,\n placement: placement,\n mouseEnterDelay: mouseEnterDelay,\n mouseLeaveDelay: mouseLeaveDelay,\n prefixCls: prefixCls,\n overlayClassName: customOverlayClassName,\n overlayStyle: Object.assign(Object.assign({}, arrowContentStyle), overlayStyle),\n getTooltipContainer: getPopupContainer || getTooltipContainer || getContextPopupContainer,\n ref: ref,\n builtinPlacements: getTooltipPlacements(),\n overlay: getOverlay(),\n visible: tempOpen,\n onVisibleChange: onOpenChange,\n afterVisibleChange: afterOpenChange !== null && afterOpenChange !== void 0 ? afterOpenChange : afterVisibleChange,\n onPopupAlign: onPopupAlign,\n overlayInnerStyle: formattedOverlayInnerStyle,\n arrowContent: /*#__PURE__*/React.createElement(\"span\", {\n className: `${prefixCls}-arrow-content`\n }),\n motion: {\n motionName: getTransitionName(rootPrefixCls, 'zoom-big-fast', props.transitionName),\n motionDeadline: 1000\n }\n }), tempOpen ? cloneElement(child, {\n className: childCls\n }) : child));\n});\nif (process.env.NODE_ENV !== 'production') {\n Tooltip.displayName = 'Tooltip';\n}\nTooltip._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;\nexport default Tooltip;","import * as React from 'react';\nimport { Popup } from 'rc-tooltip';\nimport classNames from 'classnames';\nimport { ConfigContext } from '../config-provider';\nimport useStyle from './style';\nimport { parseColor } from './util';\n// ant-tooltip css-dev-only-do-not-override-w2s56n ant-tooltip-placement-top ant-tooltip-hidden\nexport default function PurePanel(props) {\n const {\n prefixCls: customizePrefixCls,\n className,\n placement = 'top',\n title,\n color,\n overlayInnerStyle\n } = props;\n const {\n getPrefixCls\n } = React.useContext(ConfigContext);\n const prefixCls = getPrefixCls('tooltip', customizePrefixCls);\n const [wrapSSR, hashId] = useStyle(prefixCls, true);\n // Color\n const colorInfo = parseColor(prefixCls, color);\n const formattedOverlayInnerStyle = Object.assign(Object.assign({}, overlayInnerStyle), colorInfo.overlayStyle);\n const arrowContentStyle = colorInfo.arrowStyle;\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(hashId, prefixCls, `${prefixCls}-pure`, `${prefixCls}-placement-${placement}`, className, colorInfo.className),\n style: arrowContentStyle\n }, /*#__PURE__*/React.createElement(Popup, Object.assign({}, props, {\n className: hashId,\n prefixCls: prefixCls,\n overlayInnerStyle: formattedOverlayInnerStyle\n }), title)));\n}","// This icon file is generated automatically.\nvar CopyOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z\" } }] }, \"name\": \"copy\", \"theme\": \"outlined\" };\nexport default CopyOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport CopyOutlinedSvg from \"@ant-design/icons-svg/es/asn/CopyOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar CopyOutlined = function CopyOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: CopyOutlinedSvg\n }));\n};\nCopyOutlined.displayName = 'CopyOutlined';\nexport default /*#__PURE__*/React.forwardRef(CopyOutlined);","// This icon file is generated automatically.\nvar EditOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z\" } }] }, \"name\": \"edit\", \"theme\": \"outlined\" };\nexport default EditOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport EditOutlinedSvg from \"@ant-design/icons-svg/es/asn/EditOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar EditOutlined = function EditOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: EditOutlinedSvg\n }));\n};\nEditOutlined.displayName = 'EditOutlined';\nexport default /*#__PURE__*/React.forwardRef(EditOutlined);","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n/**\n * Wrap of sub component which need use as Button capacity (like Icon component).\n *\n * This helps accessibility reader to tread as a interactive button to operation.\n */\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nconst inlineStyle = {\n border: 0,\n background: 'transparent',\n padding: 0,\n lineHeight: 'inherit',\n display: 'inline-block'\n};\nconst TransButton = /*#__PURE__*/React.forwardRef((props, ref) => {\n const onKeyDown = event => {\n const {\n keyCode\n } = event;\n if (keyCode === KeyCode.ENTER) {\n event.preventDefault();\n }\n };\n const onKeyUp = event => {\n const {\n keyCode\n } = event;\n const {\n onClick\n } = props;\n if (keyCode === KeyCode.ENTER && onClick) {\n onClick();\n }\n };\n const {\n style,\n noStyle,\n disabled\n } = props,\n restProps = __rest(props, [\"style\", \"noStyle\", \"disabled\"]);\n let mergedStyle = {};\n if (!noStyle) {\n mergedStyle = Object.assign({}, inlineStyle);\n }\n if (disabled) {\n mergedStyle.pointerEvents = 'none';\n }\n mergedStyle = Object.assign(Object.assign({}, mergedStyle), style);\n return /*#__PURE__*/React.createElement(\"div\", Object.assign({\n role: \"button\",\n tabIndex: 0,\n ref: ref\n }, restProps, {\n onKeyDown: onKeyDown,\n onKeyUp: onKeyUp,\n style: mergedStyle\n }));\n});\nexport default TransButton;","import canUseDom from \"./canUseDom\";\nvar isStyleNameSupport = function isStyleNameSupport(styleName) {\n if (canUseDom() && window.document.documentElement) {\n var styleNameList = Array.isArray(styleName) ? styleName : [styleName];\n var documentElement = window.document.documentElement;\n return styleNameList.some(function (name) {\n return name in documentElement.style;\n });\n }\n return false;\n};\nvar isStyleValueSupport = function isStyleValueSupport(styleName, value) {\n if (!isStyleNameSupport(styleName)) {\n return false;\n }\n var ele = document.createElement('div');\n var origin = ele.style[styleName];\n ele.style[styleName] = value;\n return ele.style[styleName] !== origin;\n};\nexport function isStyleSupport(styleName, styleValue) {\n if (!Array.isArray(styleName) && styleValue !== undefined) {\n return isStyleValueSupport(styleName, styleValue);\n }\n return isStyleNameSupport(styleName);\n}","// This icon file is generated automatically.\nvar EnterOutlined = { \"icon\": { \"tag\": \"svg\", \"attrs\": { \"viewBox\": \"64 64 896 896\", \"focusable\": \"false\" }, \"children\": [{ \"tag\": \"path\", \"attrs\": { \"d\": \"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z\" } }] }, \"name\": \"enter\", \"theme\": \"outlined\" };\nexport default EnterOutlined;\n","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n// GENERATE BY ./scripts/generate.ts\n// DON NOT EDIT IT MANUALLY\nimport * as React from 'react';\nimport EnterOutlinedSvg from \"@ant-design/icons-svg/es/asn/EnterOutlined\";\nimport AntdIcon from '../components/AntdIcon';\nvar EnterOutlined = function EnterOutlined(props, ref) {\n return /*#__PURE__*/React.createElement(AntdIcon, _objectSpread(_objectSpread({}, props), {}, {\n ref: ref,\n icon: EnterOutlinedSvg\n }));\n};\nEnterOutlined.displayName = 'EnterOutlined';\nexport default /*#__PURE__*/React.forwardRef(EnterOutlined);","import EnterOutlined from \"@ant-design/icons/es/icons/EnterOutlined\";\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport * as React from 'react';\nimport TextArea from '../input/TextArea';\nimport { cloneElement } from '../_util/reactNode';\nimport useStyle from './style';\nconst Editable = _ref => {\n let {\n prefixCls,\n 'aria-label': ariaLabel,\n className,\n style,\n direction,\n maxLength,\n autoSize = true,\n value,\n onSave,\n onCancel,\n onEnd,\n component,\n enterIcon = /*#__PURE__*/React.createElement(EnterOutlined, null)\n } = _ref;\n const ref = React.useRef(null);\n const inComposition = React.useRef(false);\n const lastKeyCode = React.useRef();\n const [current, setCurrent] = React.useState(value);\n React.useEffect(() => {\n setCurrent(value);\n }, [value]);\n React.useEffect(() => {\n if (ref.current && ref.current.resizableTextArea) {\n const {\n textArea\n } = ref.current.resizableTextArea;\n textArea.focus();\n const {\n length\n } = textArea.value;\n textArea.setSelectionRange(length, length);\n }\n }, []);\n const onChange = _ref2 => {\n let {\n target\n } = _ref2;\n setCurrent(target.value.replace(/[\\n\\r]/g, ''));\n };\n const onCompositionStart = () => {\n inComposition.current = true;\n };\n const onCompositionEnd = () => {\n inComposition.current = false;\n };\n const onKeyDown = _ref3 => {\n let {\n keyCode\n } = _ref3;\n // We don't record keyCode when IME is using\n if (inComposition.current) return;\n lastKeyCode.current = keyCode;\n };\n const confirmChange = () => {\n onSave(current.trim());\n };\n const onKeyUp = _ref4 => {\n let {\n keyCode,\n ctrlKey,\n altKey,\n metaKey,\n shiftKey\n } = _ref4;\n // Check if it's a real key\n if (lastKeyCode.current === keyCode && !inComposition.current && !ctrlKey && !altKey && !metaKey && !shiftKey) {\n if (keyCode === KeyCode.ENTER) {\n confirmChange();\n onEnd === null || onEnd === void 0 ? void 0 : onEnd();\n } else if (keyCode === KeyCode.ESC) {\n onCancel();\n }\n }\n };\n const onBlur = () => {\n confirmChange();\n };\n const textClassName = component ? `${prefixCls}-${component}` : '';\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const textAreaClassName = classNames(prefixCls, `${prefixCls}-edit-content`, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, textClassName, hashId);\n return wrapSSR( /*#__PURE__*/React.createElement(\"div\", {\n className: textAreaClassName,\n style: style\n }, /*#__PURE__*/React.createElement(TextArea, {\n ref: ref,\n maxLength: maxLength,\n value: current,\n onChange: onChange,\n onKeyDown: onKeyDown,\n onKeyUp: onKeyUp,\n onCompositionStart: onCompositionStart,\n onCompositionEnd: onCompositionEnd,\n onBlur: onBlur,\n \"aria-label\": ariaLabel,\n rows: 1,\n autoSize: autoSize\n }), enterIcon !== null ? cloneElement(enterIcon, {\n className: `${prefixCls}-edit-content-confirm`\n }) : null));\n};\nexport default Editable;","import * as React from 'react';\nexport default function useMergedConfig(propConfig, templateConfig) {\n return React.useMemo(() => {\n const support = !!propConfig;\n return [support, Object.assign(Object.assign({}, templateConfig), support && typeof propConfig === 'object' ? propConfig : null)];\n }, [propConfig]);\n}","import * as React from 'react';\n/** Similar with `useEffect` but only trigger after mounted */\nconst useUpdatedEffect = (callback, conditions) => {\n const mountRef = React.useRef(false);\n React.useEffect(() => {\n if (mountRef.current) {\n callback();\n } else {\n mountRef.current = true;\n }\n }, conditions);\n};\nexport default useUpdatedEffect;","import toArray from \"rc-util/es/Children/toArray\";\nimport useIsomorphicLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\nfunction cuttable(node) {\n const type = typeof node;\n return type === 'string' || type === 'number';\n}\nfunction getNodesLen(nodeList) {\n let totalLen = 0;\n nodeList.forEach(node => {\n if (cuttable(node)) {\n totalLen += String(node).length;\n } else {\n totalLen += 1;\n }\n });\n return totalLen;\n}\nfunction sliceNodes(nodeList, len) {\n let currLen = 0;\n const currentNodeList = [];\n for (let i = 0; i < nodeList.length; i += 1) {\n // Match to return\n if (currLen === len) {\n return currentNodeList;\n }\n const node = nodeList[i];\n const canCut = cuttable(node);\n const nodeLen = canCut ? String(node).length : 1;\n const nextLen = currLen + nodeLen;\n // Exceed but current not which means we need cut this\n // This will not happen on validate ReactElement\n if (nextLen > len) {\n const restLen = len - currLen;\n currentNodeList.push(String(node).slice(0, restLen));\n return currentNodeList;\n }\n currentNodeList.push(node);\n currLen = nextLen;\n }\n return nodeList;\n}\nconst NONE = 0;\nconst PREPARE = 1;\nconst WALKING = 2;\nconst DONE_WITH_ELLIPSIS = 3;\nconst DONE_WITHOUT_ELLIPSIS = 4;\nconst Ellipsis = _ref => {\n let {\n enabledMeasure,\n children,\n text,\n width,\n fontSize,\n rows,\n onEllipsis\n } = _ref;\n const [[startLen, midLen, endLen], setCutLength] = React.useState([0, 0, 0]);\n const [walkingState, setWalkingState] = React.useState(NONE);\n const [singleRowHeight, setSingleRowHeight] = React.useState(0);\n const singleRowRef = React.useRef(null);\n const midRowRef = React.useRef(null);\n const nodeList = React.useMemo(() => toArray(text), [text]);\n const totalLen = React.useMemo(() => getNodesLen(nodeList), [nodeList]);\n const mergedChildren = React.useMemo(() => {\n if (!enabledMeasure || walkingState !== DONE_WITH_ELLIPSIS) {\n return children(nodeList, false);\n }\n return children(sliceNodes(nodeList, midLen), midLen < totalLen);\n }, [enabledMeasure, walkingState, children, nodeList, midLen, totalLen]);\n // ======================== Walk ========================\n useIsomorphicLayoutEffect(() => {\n if (enabledMeasure && width && fontSize && totalLen) {\n setWalkingState(PREPARE);\n setCutLength([0, Math.ceil(totalLen / 2), totalLen]);\n }\n }, [enabledMeasure, width, fontSize, text, totalLen, rows]);\n useIsomorphicLayoutEffect(() => {\n var _a;\n if (walkingState === PREPARE) {\n setSingleRowHeight(((_a = singleRowRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 0);\n }\n }, [walkingState]);\n useIsomorphicLayoutEffect(() => {\n var _a, _b;\n if (singleRowHeight) {\n if (walkingState === PREPARE) {\n // Ignore if position is enough\n const midHeight = ((_a = midRowRef.current) === null || _a === void 0 ? void 0 : _a.offsetHeight) || 0;\n const maxHeight = rows * singleRowHeight;\n if (midHeight <= maxHeight) {\n setWalkingState(DONE_WITHOUT_ELLIPSIS);\n onEllipsis(false);\n } else {\n setWalkingState(WALKING);\n }\n } else if (walkingState === WALKING) {\n if (startLen !== endLen) {\n const midHeight = ((_b = midRowRef.current) === null || _b === void 0 ? void 0 : _b.offsetHeight) || 0;\n const maxHeight = rows * singleRowHeight;\n let nextStartLen = startLen;\n let nextEndLen = endLen;\n // We reach the last round\n if (startLen === endLen - 1) {\n nextEndLen = startLen;\n } else if (midHeight <= maxHeight) {\n nextStartLen = midLen;\n } else {\n nextEndLen = midLen;\n }\n const nextMidLen = Math.ceil((nextStartLen + nextEndLen) / 2);\n setCutLength([nextStartLen, nextMidLen, nextEndLen]);\n } else {\n setWalkingState(DONE_WITH_ELLIPSIS);\n onEllipsis(true);\n }\n }\n }\n }, [walkingState, startLen, endLen, rows, singleRowHeight]);\n // ======================= Render =======================\n const measureStyle = {\n width,\n whiteSpace: 'normal',\n margin: 0,\n padding: 0\n };\n const renderMeasure = (content, ref, style) => /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": true,\n ref: ref,\n style: Object.assign({\n position: 'fixed',\n display: 'block',\n left: 0,\n top: 0,\n zIndex: -9999,\n visibility: 'hidden',\n pointerEvents: 'none',\n fontSize: Math.floor(fontSize / 2) * 2\n }, style)\n }, content);\n const renderMeasureSlice = (len, ref) => {\n const sliceNodeList = sliceNodes(nodeList, len);\n return renderMeasure(children(sliceNodeList, true), ref, measureStyle);\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, mergedChildren, enabledMeasure && walkingState !== DONE_WITH_ELLIPSIS && walkingState !== DONE_WITHOUT_ELLIPSIS && /*#__PURE__*/React.createElement(React.Fragment, null, renderMeasure('lg', singleRowRef, {\n wordBreak: 'keep-all',\n whiteSpace: 'nowrap'\n }), walkingState === PREPARE ? renderMeasure(children(nodeList, false), midRowRef, measureStyle) : renderMeasureSlice(midLen, midRowRef)));\n};\nif (process.env.NODE_ENV !== 'production') {\n Ellipsis.displayName = 'Ellipsis';\n}\nexport default Ellipsis;","import * as React from 'react';\nimport Tooltip from '../../tooltip';\nconst EllipsisTooltip = _ref => {\n let {\n enabledEllipsis,\n isEllipsis,\n children,\n tooltipProps\n } = _ref;\n if (!(tooltipProps === null || tooltipProps === void 0 ? void 0 : tooltipProps.title) || !enabledEllipsis) {\n return children;\n }\n return /*#__PURE__*/React.createElement(Tooltip, Object.assign({\n open: isEllipsis ? undefined : false\n }, tooltipProps), children);\n};\nif (process.env.NODE_ENV !== 'production') {\n EllipsisTooltip.displayName = 'EllipsisTooltip';\n}\nexport default EllipsisTooltip;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport CheckOutlined from \"@ant-design/icons/es/icons/CheckOutlined\";\nimport CopyOutlined from \"@ant-design/icons/es/icons/CopyOutlined\";\nimport EditOutlined from \"@ant-design/icons/es/icons/EditOutlined\";\nimport classNames from 'classnames';\nimport copy from 'copy-to-clipboard';\nimport ResizeObserver from 'rc-resize-observer';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport useIsomorphicLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nimport omit from \"rc-util/es/omit\";\nimport { composeRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { ConfigContext } from '../../config-provider';\nimport { useLocaleReceiver } from '../../locale/LocaleReceiver';\nimport TransButton from '../../_util/transButton';\nimport { isStyleSupport } from '../../_util/styleChecker';\nimport Tooltip from '../../tooltip';\nimport Editable from '../Editable';\nimport useMergedConfig from '../hooks/useMergedConfig';\nimport useUpdatedEffect from '../hooks/useUpdatedEffect';\nimport Typography from '../Typography';\nimport Ellipsis from './Ellipsis';\nimport EllipsisTooltip from './EllipsisTooltip';\nfunction wrapperDecorations(_ref, content) {\n let {\n mark,\n code,\n underline,\n delete: del,\n strong,\n keyboard,\n italic\n } = _ref;\n let currentContent = content;\n function wrap(tag, needed) {\n if (!needed) {\n return;\n }\n currentContent = /*#__PURE__*/React.createElement(tag, {}, currentContent);\n }\n wrap('strong', strong);\n wrap('u', underline);\n wrap('del', del);\n wrap('code', code);\n wrap('mark', mark);\n wrap('kbd', keyboard);\n wrap('i', italic);\n return currentContent;\n}\nfunction getNode(dom, defaultNode, needDom) {\n if (dom === true || dom === undefined) {\n return defaultNode;\n }\n return dom || needDom && defaultNode;\n}\nfunction toList(val) {\n if (val === false) {\n return [false, false];\n }\n return Array.isArray(val) ? val : [val];\n}\nconst ELLIPSIS_STR = '...';\nconst Base = /*#__PURE__*/React.forwardRef((props, ref) => {\n var _a, _b, _c;\n const {\n prefixCls: customizePrefixCls,\n className,\n style,\n type,\n disabled,\n children,\n ellipsis,\n editable,\n copyable,\n component,\n title\n } = props,\n restProps = __rest(props, [\"prefixCls\", \"className\", \"style\", \"type\", \"disabled\", \"children\", \"ellipsis\", \"editable\", \"copyable\", \"component\", \"title\"]);\n const {\n getPrefixCls,\n direction\n } = React.useContext(ConfigContext);\n const textLocale = useLocaleReceiver('Text')[0]; // Force TS get this\n const typographyRef = React.useRef(null);\n const editIconRef = React.useRef(null);\n // ============================ MISC ============================\n const prefixCls = getPrefixCls('typography', customizePrefixCls);\n const textProps = omit(restProps, ['mark', 'code', 'delete', 'underline', 'strong', 'keyboard', 'italic']);\n // ========================== Editable ==========================\n const [enableEdit, editConfig] = useMergedConfig(editable);\n const [editing, setEditing] = useMergedState(false, {\n value: editConfig.editing\n });\n const {\n triggerType = ['icon']\n } = editConfig;\n const triggerEdit = edit => {\n var _a;\n if (edit) {\n (_a = editConfig.onStart) === null || _a === void 0 ? void 0 : _a.call(editConfig);\n }\n setEditing(edit);\n };\n // Focus edit icon when back\n useUpdatedEffect(() => {\n var _a;\n if (!editing) {\n (_a = editIconRef.current) === null || _a === void 0 ? void 0 : _a.focus();\n }\n }, [editing]);\n const onEditClick = e => {\n e === null || e === void 0 ? void 0 : e.preventDefault();\n triggerEdit(true);\n };\n const onEditChange = value => {\n var _a;\n (_a = editConfig.onChange) === null || _a === void 0 ? void 0 : _a.call(editConfig, value);\n triggerEdit(false);\n };\n const onEditCancel = () => {\n var _a;\n (_a = editConfig.onCancel) === null || _a === void 0 ? void 0 : _a.call(editConfig);\n triggerEdit(false);\n };\n // ========================== Copyable ==========================\n const [enableCopy, copyConfig] = useMergedConfig(copyable);\n const [copied, setCopied] = React.useState(false);\n const copyIdRef = React.useRef();\n const copyOptions = {};\n if (copyConfig.format) {\n copyOptions.format = copyConfig.format;\n }\n const cleanCopyId = () => {\n window.clearTimeout(copyIdRef.current);\n };\n const onCopyClick = e => {\n var _a;\n e === null || e === void 0 ? void 0 : e.preventDefault();\n e === null || e === void 0 ? void 0 : e.stopPropagation();\n copy(copyConfig.text || String(children) || '', copyOptions);\n setCopied(true);\n // Trigger tips update\n cleanCopyId();\n copyIdRef.current = window.setTimeout(() => {\n setCopied(false);\n }, 3000);\n (_a = copyConfig.onCopy) === null || _a === void 0 ? void 0 : _a.call(copyConfig, e);\n };\n React.useEffect(() => cleanCopyId, []);\n // ========================== Ellipsis ==========================\n const [isLineClampSupport, setIsLineClampSupport] = React.useState(false);\n const [isTextOverflowSupport, setIsTextOverflowSupport] = React.useState(false);\n const [expanded, setExpanded] = React.useState(false);\n const [isJsEllipsis, setIsJsEllipsis] = React.useState(false);\n const [isNativeEllipsis, setIsNativeEllipsis] = React.useState(false);\n const [isNativeVisible, setIsNativeVisible] = React.useState(true);\n const [enableEllipsis, ellipsisConfig] = useMergedConfig(ellipsis, {\n expandable: false\n });\n const mergedEnableEllipsis = enableEllipsis && !expanded;\n // Shared prop to reduce bundle size\n const {\n rows = 1\n } = ellipsisConfig;\n const needMeasureEllipsis = React.useMemo(() =>\n // Disable ellipsis\n !mergedEnableEllipsis ||\n // Provide suffix\n ellipsisConfig.suffix !== undefined || ellipsisConfig.onEllipsis ||\n // Can't use css ellipsis since we need to provide the place for button\n ellipsisConfig.expandable || enableEdit || enableCopy, [mergedEnableEllipsis, ellipsisConfig, enableEdit, enableCopy]);\n useIsomorphicLayoutEffect(() => {\n if (enableEllipsis && !needMeasureEllipsis) {\n setIsLineClampSupport(isStyleSupport('webkitLineClamp'));\n setIsTextOverflowSupport(isStyleSupport('textOverflow'));\n }\n }, [needMeasureEllipsis, enableEllipsis]);\n const cssEllipsis = React.useMemo(() => {\n if (needMeasureEllipsis) {\n return false;\n }\n if (rows === 1) {\n return isTextOverflowSupport;\n }\n return isLineClampSupport;\n }, [needMeasureEllipsis, isTextOverflowSupport, isLineClampSupport]);\n const isMergedEllipsis = mergedEnableEllipsis && (cssEllipsis ? isNativeEllipsis : isJsEllipsis);\n const cssTextOverflow = mergedEnableEllipsis && rows === 1 && cssEllipsis;\n const cssLineClamp = mergedEnableEllipsis && rows > 1 && cssEllipsis;\n // >>>>> Expand\n const onExpandClick = e => {\n var _a;\n setExpanded(true);\n (_a = ellipsisConfig.onExpand) === null || _a === void 0 ? void 0 : _a.call(ellipsisConfig, e);\n };\n const [ellipsisWidth, setEllipsisWidth] = React.useState(0);\n const [ellipsisFontSize, setEllipsisFontSize] = React.useState(0);\n const onResize = (_ref2, element) => {\n let {\n offsetWidth\n } = _ref2;\n var _a;\n setEllipsisWidth(offsetWidth);\n setEllipsisFontSize(parseInt((_a = window.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(window, element).fontSize, 10) || 0);\n };\n // >>>>> JS Ellipsis\n const onJsEllipsis = jsEllipsis => {\n var _a;\n setIsJsEllipsis(jsEllipsis);\n // Trigger if changed\n if (isJsEllipsis !== jsEllipsis) {\n (_a = ellipsisConfig.onEllipsis) === null || _a === void 0 ? void 0 : _a.call(ellipsisConfig, jsEllipsis);\n }\n };\n // >>>>> Native ellipsis\n React.useEffect(() => {\n const textEle = typographyRef.current;\n if (enableEllipsis && cssEllipsis && textEle) {\n const currentEllipsis = cssLineClamp ? textEle.offsetHeight < textEle.scrollHeight : textEle.offsetWidth < textEle.scrollWidth;\n if (isNativeEllipsis !== currentEllipsis) {\n setIsNativeEllipsis(currentEllipsis);\n }\n }\n }, [enableEllipsis, cssEllipsis, children, cssLineClamp, isNativeVisible]);\n // https://github.com/ant-design/ant-design/issues/36786\n // Use IntersectionObserver to check if element is invisible\n React.useEffect(() => {\n const textEle = typographyRef.current;\n if (typeof IntersectionObserver === 'undefined' || !textEle || !cssEllipsis || !mergedEnableEllipsis) {\n return;\n }\n /* eslint-disable-next-line compat/compat */\n const observer = new IntersectionObserver(() => {\n setIsNativeVisible(!!textEle.offsetParent);\n });\n observer.observe(textEle);\n return () => {\n observer.disconnect();\n };\n }, [cssEllipsis, mergedEnableEllipsis]);\n // ========================== Tooltip ===========================\n let tooltipProps = {};\n if (ellipsisConfig.tooltip === true) {\n tooltipProps = {\n title: (_a = editConfig.text) !== null && _a !== void 0 ? _a : children\n };\n } else if ( /*#__PURE__*/React.isValidElement(ellipsisConfig.tooltip)) {\n tooltipProps = {\n title: ellipsisConfig.tooltip\n };\n } else if (typeof ellipsisConfig.tooltip === 'object') {\n tooltipProps = Object.assign({\n title: (_b = editConfig.text) !== null && _b !== void 0 ? _b : children\n }, ellipsisConfig.tooltip);\n } else {\n tooltipProps = {\n title: ellipsisConfig.tooltip\n };\n }\n const topAriaLabel = React.useMemo(() => {\n const isValid = val => ['string', 'number'].includes(typeof val);\n if (!enableEllipsis || cssEllipsis) {\n return undefined;\n }\n if (isValid(editConfig.text)) {\n return editConfig.text;\n }\n if (isValid(children)) {\n return children;\n }\n if (isValid(title)) {\n return title;\n }\n if (isValid(tooltipProps.title)) {\n return tooltipProps.title;\n }\n return undefined;\n }, [enableEllipsis, cssEllipsis, title, tooltipProps.title, isMergedEllipsis]);\n // =========================== Render ===========================\n // >>>>>>>>>>> Editing input\n if (editing) {\n return /*#__PURE__*/React.createElement(Editable, {\n value: (_c = editConfig.text) !== null && _c !== void 0 ? _c : typeof children === 'string' ? children : '',\n onSave: onEditChange,\n onCancel: onEditCancel,\n onEnd: editConfig.onEnd,\n prefixCls: prefixCls,\n className: className,\n style: style,\n direction: direction,\n component: component,\n maxLength: editConfig.maxLength,\n autoSize: editConfig.autoSize,\n enterIcon: editConfig.enterIcon\n });\n }\n // >>>>>>>>>>> Typography\n // Expand\n const renderExpand = () => {\n const {\n expandable,\n symbol\n } = ellipsisConfig;\n if (!expandable) return null;\n let expandContent;\n if (symbol) {\n expandContent = symbol;\n } else {\n expandContent = textLocale.expand;\n }\n return /*#__PURE__*/React.createElement(\"a\", {\n key: \"expand\",\n className: `${prefixCls}-expand`,\n onClick: onExpandClick,\n \"aria-label\": textLocale.expand\n }, expandContent);\n };\n // Edit\n const renderEdit = () => {\n if (!enableEdit) return;\n const {\n icon,\n tooltip\n } = editConfig;\n const editTitle = toArray(tooltip)[0] || textLocale.edit;\n const ariaLabel = typeof editTitle === 'string' ? editTitle : '';\n return triggerType.includes('icon') ? /*#__PURE__*/React.createElement(Tooltip, {\n key: \"edit\",\n title: tooltip === false ? '' : editTitle\n }, /*#__PURE__*/React.createElement(TransButton, {\n ref: editIconRef,\n className: `${prefixCls}-edit`,\n onClick: onEditClick,\n \"aria-label\": ariaLabel\n }, icon || /*#__PURE__*/React.createElement(EditOutlined, {\n role: \"button\"\n }))) : null;\n };\n // Copy\n const renderCopy = () => {\n if (!enableCopy) return;\n const {\n tooltips,\n icon\n } = copyConfig;\n const tooltipNodes = toList(tooltips);\n const iconNodes = toList(icon);\n const copyTitle = copied ? getNode(tooltipNodes[1], textLocale.copied) : getNode(tooltipNodes[0], textLocale.copy);\n const systemStr = copied ? textLocale.copied : textLocale.copy;\n const ariaLabel = typeof copyTitle === 'string' ? copyTitle : systemStr;\n return /*#__PURE__*/React.createElement(Tooltip, {\n key: \"copy\",\n title: copyTitle\n }, /*#__PURE__*/React.createElement(TransButton, {\n className: classNames(`${prefixCls}-copy`, copied && `${prefixCls}-copy-success`),\n onClick: onCopyClick,\n \"aria-label\": ariaLabel\n }, copied ? getNode(iconNodes[1], /*#__PURE__*/React.createElement(CheckOutlined, null), true) : getNode(iconNodes[0], /*#__PURE__*/React.createElement(CopyOutlined, null), true)));\n };\n const renderOperations = renderExpanded => [renderExpanded && renderExpand(), renderEdit(), renderCopy()];\n const renderEllipsis = needEllipsis => [needEllipsis && /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": true,\n key: \"ellipsis\"\n }, ELLIPSIS_STR), ellipsisConfig.suffix, renderOperations(needEllipsis)];\n return /*#__PURE__*/React.createElement(ResizeObserver, {\n onResize: onResize,\n disabled: !mergedEnableEllipsis || cssEllipsis\n }, resizeRef => /*#__PURE__*/React.createElement(EllipsisTooltip, {\n tooltipProps: tooltipProps,\n enabledEllipsis: mergedEnableEllipsis,\n isEllipsis: isMergedEllipsis\n }, /*#__PURE__*/React.createElement(Typography, Object.assign({\n className: classNames({\n [`${prefixCls}-${type}`]: type,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-ellipsis`]: enableEllipsis,\n [`${prefixCls}-single-line`]: mergedEnableEllipsis && rows === 1,\n [`${prefixCls}-ellipsis-single-line`]: cssTextOverflow,\n [`${prefixCls}-ellipsis-multiple-line`]: cssLineClamp\n }, className),\n prefixCls: customizePrefixCls,\n style: Object.assign(Object.assign({}, style), {\n WebkitLineClamp: cssLineClamp ? rows : undefined\n }),\n component: component,\n ref: composeRef(resizeRef, typographyRef, ref),\n direction: direction,\n onClick: triggerType.includes('text') ? onEditClick : undefined,\n \"aria-label\": topAriaLabel === null || topAriaLabel === void 0 ? void 0 : topAriaLabel.toString(),\n title: title\n }, textProps), /*#__PURE__*/React.createElement(Ellipsis, {\n enabledMeasure: mergedEnableEllipsis && !cssEllipsis,\n text: children,\n rows: rows,\n width: ellipsisWidth,\n fontSize: ellipsisFontSize,\n onEllipsis: onJsEllipsis\n }, (node, needEllipsis) => {\n let renderNode = node;\n if (node.length && needEllipsis && topAriaLabel) {\n renderNode = /*#__PURE__*/React.createElement(\"span\", {\n key: \"show-content\",\n \"aria-hidden\": true\n }, renderNode);\n }\n const wrappedContext = wrapperDecorations(props, /*#__PURE__*/React.createElement(React.Fragment, null, renderNode, renderEllipsis(needEllipsis)));\n return wrappedContext;\n }))));\n});\nexport default Base;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport warning from '../_util/warning';\nimport Base from './Base';\nconst TITLE_ELE_LIST = [1, 2, 3, 4, 5];\nconst Title = /*#__PURE__*/React.forwardRef((props, ref) => {\n const {\n level = 1\n } = props,\n restProps = __rest(props, [\"level\"]);\n let component;\n if (TITLE_ELE_LIST.includes(level)) {\n component = `h${level}`;\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Typography.Title', 'Title only accept `1 | 2 | 3 | 4 | 5` as `level` value. And `5` need 4.6.0+ version.') : void 0;\n component = 'h1';\n }\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n ref: ref\n }, restProps, {\n component: component\n }));\n});\nexport default Title;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport classNames from 'classnames';\nimport { composeRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { ConfigContext } from '../config-provider';\nimport warning from '../_util/warning';\nimport useStyle from './style';\nconst Typography = /*#__PURE__*/React.forwardRef((_a, ref) => {\n var {\n prefixCls: customizePrefixCls,\n component: Component = 'article',\n className,\n rootClassName,\n setContentRef,\n children,\n direction: typographyDirection\n } = _a,\n restProps = __rest(_a, [\"prefixCls\", \"component\", \"className\", \"rootClassName\", \"setContentRef\", \"children\", \"direction\"]);\n const {\n getPrefixCls,\n direction: contextDirection\n } = React.useContext(ConfigContext);\n const direction = typographyDirection !== null && typographyDirection !== void 0 ? typographyDirection : contextDirection;\n let mergedRef = ref;\n if (setContentRef) {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Typography', '`setContentRef` is deprecated. Please use `ref` instead.') : void 0;\n mergedRef = composeRef(ref, setContentRef);\n }\n const prefixCls = getPrefixCls('typography', customizePrefixCls);\n // Style\n const [wrapSSR, hashId] = useStyle(prefixCls);\n const componentClassName = classNames(prefixCls, {\n [`${prefixCls}-rtl`]: direction === 'rtl'\n }, className, rootClassName, hashId);\n return wrapSSR(\n /*#__PURE__*/\n // @ts-expect-error: Expression produces a union type that is too complex to represent.\n React.createElement(Component, Object.assign({\n className: componentClassName,\n ref: mergedRef\n }, restProps), children));\n});\nif (process.env.NODE_ENV !== 'production') {\n Typography.displayName = 'Typography';\n}\n// es default export should use const instead of let\nexport default Typography;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport * as React from 'react';\nimport warning from '../_util/warning';\nimport Base from './Base';\nconst Link = /*#__PURE__*/React.forwardRef((_a, ref) => {\n var {\n ellipsis,\n rel\n } = _a,\n restProps = __rest(_a, [\"ellipsis\", \"rel\"]);\n process.env.NODE_ENV !== \"production\" ? warning(typeof ellipsis !== 'object', 'Typography.Link', '`ellipsis` only supports boolean value.') : void 0;\n const mergedProps = Object.assign(Object.assign({}, restProps), {\n rel: rel === undefined && restProps.target === '_blank' ? 'noopener noreferrer' : rel\n });\n // @ts-expect-error: https://github.com/ant-design/ant-design/issues/26622\n delete mergedProps.navigate;\n return /*#__PURE__*/React.createElement(Base, Object.assign({}, mergedProps, {\n ref: ref,\n ellipsis: !!ellipsis,\n component: \"a\"\n }));\n});\nexport default Link;","import * as React from 'react';\nimport Base from './Base';\nconst Paragraph = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(Base, Object.assign({\n ref: ref\n}, props, {\n component: \"div\"\n})));\nexport default Paragraph;","var __rest = this && this.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport omit from \"rc-util/es/omit\";\nimport * as React from 'react';\nimport warning from '../_util/warning';\nimport Base from './Base';\nconst Text = (_a, ref) => {\n var {\n ellipsis\n } = _a,\n restProps = __rest(_a, [\"ellipsis\"]);\n const mergedEllipsis = React.useMemo(() => {\n if (ellipsis && typeof ellipsis === 'object') {\n return omit(ellipsis, ['expandable', 'rows']);\n }\n return ellipsis;\n }, [ellipsis]);\n process.env.NODE_ENV !== \"production\" ? warning(typeof ellipsis !== 'object' || !ellipsis || !('expandable' in ellipsis) && !('rows' in ellipsis), 'Typography.Text', '`ellipsis` do not support `expandable` or `rows` props.') : void 0;\n return /*#__PURE__*/React.createElement(Base, Object.assign({\n ref: ref\n }, restProps, {\n ellipsis: mergedEllipsis,\n component: \"span\"\n }));\n};\nexport default /*#__PURE__*/React.forwardRef(Text);","import Link from './Link';\nimport Paragraph from './Paragraph';\nimport Text from './Text';\nimport Title from './Title';\nimport OriginTypography from './Typography';\nconst Typography = OriginTypography;\nTypography.Text = Text;\nTypography.Link = Link;\nTypography.Title = Title;\nTypography.Paragraph = Paragraph;\nexport default Typography;","// eslint-disable-next-line import/prefer-default-export\nexport const operationUnit = token => ({\n // FIXME: This use link but is a operation unit. Seems should be a colorPrimary.\n // And Typography use this to generate link style which should not do this.\n color: token.colorLink,\n textDecoration: 'none',\n outline: 'none',\n cursor: 'pointer',\n transition: `color ${token.motionDurationSlow}`,\n '&:focus, &:hover': {\n color: token.colorLinkHover\n },\n '&:active': {\n color: token.colorLinkActive\n }\n});","/*\n.typography-title(@fontSize; @fontWeight; @lineHeight; @headingColor; @headingMarginBottom;) {\n margin-bottom: @headingMarginBottom;\n color: @headingColor;\n font-weight: @fontWeight;\n fontSize: @fontSize;\n line-height: @lineHeight;\n}\n*/\nimport { gold } from '@ant-design/colors';\nimport { initInputToken } from '../../input/style';\nimport { operationUnit } from '../../style';\n// eslint-disable-next-line import/prefer-default-export\nconst getTitleStyle = (fontSize, lineHeight, color, token) => {\n const {\n sizeMarginHeadingVerticalEnd,\n fontWeightStrong\n } = token;\n return {\n marginBottom: sizeMarginHeadingVerticalEnd,\n color,\n fontWeight: fontWeightStrong,\n fontSize,\n lineHeight\n };\n};\n// eslint-disable-next-line import/prefer-default-export\nexport const getTitleStyles = token => {\n const headings = [1, 2, 3, 4, 5];\n const styles = {};\n headings.forEach(headingLevel => {\n styles[`\n h${headingLevel}&,\n div&-h${headingLevel},\n div&-h${headingLevel} > textarea,\n h${headingLevel}\n `] = getTitleStyle(token[`fontSizeHeading${headingLevel}`], token[`lineHeightHeading${headingLevel}`], token.colorTextHeading, token);\n });\n return styles;\n};\nexport const getLinkStyles = token => {\n const {\n componentCls\n } = token;\n return {\n 'a&, a': Object.assign(Object.assign({}, operationUnit(token)), {\n textDecoration: token.linkDecoration,\n '&:active, &:hover': {\n textDecoration: token.linkHoverDecoration\n },\n [`&[disabled], &${componentCls}-disabled`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n '&:active, &:hover': {\n color: token.colorTextDisabled\n },\n '&:active': {\n pointerEvents: 'none'\n }\n }\n })\n };\n};\nexport const getResetStyles = token => ({\n code: {\n margin: '0 0.2em',\n paddingInline: '0.4em',\n paddingBlock: '0.2em 0.1em',\n fontSize: '85%',\n fontFamily: token.fontFamilyCode,\n background: 'rgba(150, 150, 150, 0.1)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderRadius: 3\n },\n kbd: {\n margin: '0 0.2em',\n paddingInline: '0.4em',\n paddingBlock: '0.15em 0.1em',\n fontSize: '90%',\n fontFamily: token.fontFamilyCode,\n background: 'rgba(150, 150, 150, 0.06)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderBottomWidth: 2,\n borderRadius: 3\n },\n mark: {\n padding: 0,\n // FIXME hardcode in v4\n backgroundColor: gold[2]\n },\n 'u, ins': {\n textDecoration: 'underline',\n textDecorationSkipInk: 'auto'\n },\n 's, del': {\n textDecoration: 'line-through'\n },\n strong: {\n fontWeight: 600\n },\n // list\n 'ul, ol': {\n marginInline: 0,\n marginBlock: '0 1em',\n padding: 0,\n li: {\n marginInline: '20px 0',\n marginBlock: 0,\n paddingInline: '4px 0',\n paddingBlock: 0\n }\n },\n ul: {\n listStyleType: 'circle',\n ul: {\n listStyleType: 'disc'\n }\n },\n ol: {\n listStyleType: 'decimal'\n },\n // pre & block\n 'pre, blockquote': {\n margin: '1em 0'\n },\n pre: {\n padding: '0.4em 0.6em',\n whiteSpace: 'pre-wrap',\n wordWrap: 'break-word',\n background: 'rgba(150, 150, 150, 0.1)',\n border: '1px solid rgba(100, 100, 100, 0.2)',\n borderRadius: 3,\n fontFamily: token.fontFamilyCode,\n // Compatible for marked\n code: {\n display: 'inline',\n margin: 0,\n padding: 0,\n fontSize: 'inherit',\n fontFamily: 'inherit',\n background: 'transparent',\n border: 0\n }\n },\n blockquote: {\n paddingInline: '0.6em 0',\n paddingBlock: 0,\n borderInlineStart: '4px solid rgba(100, 100, 100, 0.2)',\n opacity: 0.85\n }\n});\nexport const getEditableStyles = token => {\n const {\n componentCls\n } = token;\n const inputToken = initInputToken(token);\n const inputShift = inputToken.inputPaddingVertical + 1;\n return {\n '&-edit-content': {\n position: 'relative',\n 'div&': {\n insetInlineStart: -token.paddingSM,\n marginTop: -inputShift,\n marginBottom: `calc(1em - ${inputShift}px)`\n },\n [`${componentCls}-edit-content-confirm`]: {\n position: 'absolute',\n insetInlineEnd: token.marginXS + 2,\n insetBlockEnd: token.marginXS,\n color: token.colorTextDescription,\n // default style\n fontWeight: 'normal',\n fontSize: token.fontSize,\n fontStyle: 'normal',\n pointerEvents: 'none'\n },\n textarea: {\n margin: '0!important',\n // Fix Editable Textarea flash in Firefox\n MozTransition: 'none',\n height: '1em'\n }\n }\n };\n};\nexport const getCopiableStyles = token => ({\n '&-copy-success': {\n [`\n &,\n &:hover,\n &:focus`]: {\n color: token.colorSuccess\n }\n }\n});\nexport const getEllipsisStyles = () => ({\n [`\n a&-ellipsis,\n span&-ellipsis\n `]: {\n display: 'inline-block',\n maxWidth: '100%'\n },\n '&-single-line': {\n whiteSpace: 'nowrap'\n },\n '&-ellipsis-single-line': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n // https://blog.csdn.net/iefreer/article/details/50421025\n 'a&, span&': {\n verticalAlign: 'bottom'\n }\n },\n '&-ellipsis-multiple-line': {\n display: '-webkit-box',\n overflow: 'hidden',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical'\n }\n});","import { genComponentStyleHook } from '../../theme/internal';\nimport { getCopiableStyles, getEditableStyles, getEllipsisStyles, getLinkStyles, getResetStyles, getTitleStyles } from './mixins';\nimport { operationUnit } from '../../style';\nconst genTypographyStyle = token => {\n const {\n componentCls,\n sizeMarginHeadingVerticalStart\n } = token;\n return {\n [componentCls]: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({\n color: token.colorText,\n wordBreak: 'break-word',\n lineHeight: token.lineHeight,\n [`&${componentCls}-secondary`]: {\n color: token.colorTextDescription\n },\n [`&${componentCls}-success`]: {\n color: token.colorSuccess\n },\n [`&${componentCls}-warning`]: {\n color: token.colorWarning\n },\n [`&${componentCls}-danger`]: {\n color: token.colorError,\n 'a&:active, a&:focus': {\n color: token.colorErrorActive\n },\n 'a&:hover': {\n color: token.colorErrorHover\n }\n },\n [`&${componentCls}-disabled`]: {\n color: token.colorTextDisabled,\n cursor: 'not-allowed',\n userSelect: 'none'\n },\n [`\n div&,\n p\n `]: {\n marginBottom: '1em'\n }\n }, getTitleStyles(token)), {\n [`\n & + h1${componentCls},\n & + h2${componentCls},\n & + h3${componentCls},\n & + h4${componentCls},\n & + h5${componentCls}\n `]: {\n marginTop: sizeMarginHeadingVerticalStart\n },\n [`\n div,\n ul,\n li,\n p,\n h1,\n h2,\n h3,\n h4,\n h5`]: {\n [`\n + h1,\n + h2,\n + h3,\n + h4,\n + h5\n `]: {\n marginTop: sizeMarginHeadingVerticalStart\n }\n }\n }), getResetStyles(token)), getLinkStyles(token)), {\n // Operation\n [`\n ${componentCls}-expand,\n ${componentCls}-edit,\n ${componentCls}-copy\n `]: Object.assign(Object.assign({}, operationUnit(token)), {\n marginInlineStart: token.marginXXS\n })\n }), getEditableStyles(token)), getCopiableStyles(token)), getEllipsisStyles()), {\n '&-rtl': {\n direction: 'rtl'\n }\n })\n };\n};\n// ============================== Export ==============================\nexport default genComponentStyleHook('Typography', token => [genTypographyStyle(token)], {\n sizeMarginHeadingVerticalStart: '1.2em',\n sizeMarginHeadingVerticalEnd: '0.5em'\n});","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","/* build: `node build.js modules=ALL exclude=gestures,accessors,erasing requirejs minifier=uglifyjs` */\n/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\n\nvar fabric = fabric || { version: '5.3.0' };\nif (typeof exports !== 'undefined') {\n exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n define([], function() { return fabric; });\n}\n/* _AMD_END_ */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n fabric.document = document;\n }\n else {\n fabric.document = document.implementation.createHTMLDocument('');\n }\n fabric.window = window;\n}\nelse {\n // assume we're running under node.js when document/window are not present\n var jsdom = require('jsdom');\n var virtualWindow = new jsdom.JSDOM(\n decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\n {\n features: {\n FetchExternalResources: ['img']\n },\n resources: 'usable'\n }).window;\n fabric.document = virtualWindow.document;\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n fabric.window = virtualWindow;\n DOMParser = fabric.window.DOMParser;\n}\n\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\n (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\n\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\n typeof window === 'undefined';\n\n/* _FROM_SVG_START_ */\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nfabric.SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n 'fill', 'fill-opacity', 'fill-rule',\n 'opacity',\n 'stroke', 'stroke-dasharray', 'stroke-linecap', 'stroke-dashoffset',\n 'stroke-linejoin', 'stroke-miterlimit',\n 'stroke-opacity', 'stroke-width',\n 'id', 'paint-order', 'vector-effect',\n 'instantiated_by_use', 'clip-path',\n];\n/* _FROM_SVG_END_ */\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = { };\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.perfLimitSizeTotal = 2097152;\n\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.maxCacheSideLimit = 4096;\n\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.minCacheSideLimit = 256;\n\n/**\n * Cache Object for widths of chars in text rendering.\n */\nfabric.charWidthsCache = { };\n\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\nfabric.textureSize = 2048;\n\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\nfabric.disableStyleCopyPaste = false;\n\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\nfabric.enableGLFiltering = true;\n\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\n fabric.window.webkitDevicePixelRatio ||\n fabric.window.mozDevicePixelRatio ||\n 1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\nfabric.browserShadowBlurConstant = 1;\n\n/**\n * This object contains the result of arc to bezier conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.arcToSegmentsCache = { };\n\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.boundsOfCurveCache = { };\n\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\nfabric.cachesBoundsOfCurve = true;\n\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function() {\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n console.log('max texture size: ' + fabric.maxTextureSize);\n return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\n }\n else if (fabric.Canvas2dFilterBackend) {\n return (new fabric.Canvas2dFilterBackend());\n }\n};\n\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system)\n window.fabric = fabric;\n}\n\n\n(function() {\n\n /**\n * @private\n * @param {String} eventName\n * @param {Function} handler\n */\n function _removeEventListener(eventName, handler) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n var eventListener = this.__eventListeners[eventName];\n if (handler) {\n eventListener[eventListener.indexOf(handler)] = false;\n }\n else {\n fabric.util.array.fill(eventListener, false);\n }\n }\n\n /**\n * Observes specified event\n * @memberOf fabric.Observable\n * @alias on\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Self} thisArg\n * @chainable\n */\n function on(eventName, handler) {\n if (!this.__eventListeners) {\n this.__eventListeners = { };\n }\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n this.on(prop, eventName[prop]);\n }\n }\n else {\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n }\n return this;\n }\n\n function _once(eventName, handler) {\n var _handler = function () {\n handler.apply(this, arguments);\n this.off(eventName, _handler);\n }.bind(this);\n this.on(eventName, _handler);\n }\n\n function once(eventName, handler) {\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n _once.call(this, prop, eventName[prop]);\n }\n }\n else {\n _once.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Stops event observing for a particular event handler. Calling this method\n * without arguments removes all handlers for all events\n * @memberOf fabric.Observable\n * @alias off\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function to be deleted from EventListeners\n * @return {Self} thisArg\n * @chainable\n */\n function off(eventName, handler) {\n if (!this.__eventListeners) {\n return this;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (arguments.length === 0) {\n for (eventName in this.__eventListeners) {\n _removeEventListener.call(this, eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (arguments.length === 1 && typeof arguments[0] === 'object') {\n for (var prop in eventName) {\n _removeEventListener.call(this, prop, eventName[prop]);\n }\n }\n else {\n _removeEventListener.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Fires event with an optional options object\n * @memberOf fabric.Observable\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n * @return {Self} thisArg\n * @chainable\n */\n function fire(eventName, options) {\n if (!this.__eventListeners) {\n return this;\n }\n\n var listenersForEvent = this.__eventListeners[eventName];\n if (!listenersForEvent) {\n return this;\n }\n\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\n }\n this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\n return value !== false;\n });\n return this;\n }\n\n /**\n * @namespace fabric.Observable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\n fabric.Observable = {\n fire: fire,\n on: on,\n once: once,\n off: off,\n };\n})();\n\n\n/**\n * @namespace fabric.Collection\n */\nfabric.Collection = {\n\n _objects: [],\n\n /**\n * Adds objects to collection, Canvas or Group, then renders canvas\n * (if `renderOnAddRemove` is not `false`).\n * in case of Group no changes to bounding box are made.\n * Objects should be instances of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the add method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n add: function () {\n this._objects.push.apply(this._objects, arguments);\n if (this._onObjectAdded) {\n for (var i = 0, length = arguments.length; i < length; i++) {\n this._onObjectAdded(arguments[i]);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n * An object should be an instance of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the insertAt method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {Object} object Object to insert\n * @param {Number} index Index to insert object at\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n * @return {Self} thisArg\n * @chainable\n */\n insertAt: function (object, index, nonSplicing) {\n var objects = this._objects;\n if (nonSplicing) {\n objects[index] = object;\n }\n else {\n objects.splice(index, 0, object);\n }\n this._onObjectAdded && this._onObjectAdded(object);\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n remove: function() {\n var objects = this._objects,\n index, somethingRemoved = false;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n index = objects.indexOf(arguments[i]);\n\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n somethingRemoved = true;\n objects.splice(index, 1);\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n return this;\n },\n\n /**\n * Executes given function for each object in this group\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n * Callback is invoked in a context of Global Object (e.g. `window`)\n * when no `context` argument is given\n *\n * @param {Object} context Context (aka thisObject)\n * @return {Self} thisArg\n * @chainable\n */\n forEachObject: function(callback, context) {\n var objects = this.getObjects();\n for (var i = 0, len = objects.length; i < len; i++) {\n callback.call(context, objects[i], i, objects);\n }\n return this;\n },\n\n /**\n * Returns an array of children objects of this instance\n * Type parameter introduced in 1.3.10\n * since 2.3.5 this method return always a COPY of the array;\n * @param {String} [type] When specified, only objects of this type are returned\n * @return {Array}\n */\n getObjects: function(type) {\n if (typeof type === 'undefined') {\n return this._objects.concat();\n }\n return this._objects.filter(function(o) {\n return o.type === type;\n });\n },\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Self} thisArg\n */\n item: function (index) {\n return this._objects[index];\n },\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty: function () {\n return this._objects.length === 0;\n },\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size: function() {\n return this._objects.length;\n },\n\n /**\n * Returns true if collection contains an object\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains: function (object, deep) {\n if (this._objects.indexOf(object) > -1) {\n return true;\n }\n else if (deep) {\n return this._objects.some(function (obj) {\n return typeof obj.contains === 'function' && obj.contains(object, true);\n });\n }\n return false;\n },\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity: function () {\n return this._objects.reduce(function (memo, current) {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n};\n\n\n/**\n * @namespace fabric.CommonMethods\n */\nfabric.CommonMethods = {\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n _setOptions: function(options) {\n for (var prop in options) {\n this.set(prop, options[prop]);\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Gradient to\n */\n _initGradient: function(filler, property) {\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n this.set(property, new fabric.Gradient(filler));\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Pattern to\n * @param {Function} [callback] callback to invoke after pattern load\n */\n _initPattern: function(filler, property, callback) {\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n this.set(property, new fabric.Pattern(filler, callback));\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n */\n _setObject: function(obj) {\n for (var prop in obj) {\n this._set(prop, obj[prop]);\n }\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n if (typeof key === 'object') {\n this._setObject(key);\n }\n else {\n this._set(key, value);\n }\n return this;\n },\n\n _set: function(key, value) {\n this[key] = value;\n },\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n * @return {fabric.Object} thisArg\n * @chainable\n */\n toggle: function(property) {\n var value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n },\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get: function(property) {\n return this[property];\n }\n};\n\n\n(function(global) {\n\n var sqrt = Math.sqrt,\n atan2 = Math.atan2,\n pow = Math.pow,\n PiBy180 = Math.PI / 180,\n PiBy2 = Math.PI / 2;\n\n /**\n * @namespace fabric.util\n */\n fabric.util = {\n\n /**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n cos: function(angle) {\n if (angle === 0) { return 1; }\n if (angle < 0) {\n // cos(a) = cos(-a)\n angle = -angle;\n }\n var angleSlice = angle / PiBy2;\n switch (angleSlice) {\n case 1: case 3: return 0;\n case 2: return -1;\n }\n return Math.cos(angle);\n },\n\n /**\n * Calculate the sin of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n sin: function(angle) {\n if (angle === 0) { return 0; }\n var angleSlice = angle / PiBy2, sign = 1;\n if (angle < 0) {\n // sin(-a) = -sin(a)\n sign = -1;\n }\n switch (angleSlice) {\n case 1: return sign;\n case 2: return 0;\n case 3: return -sign;\n }\n return Math.sin(angle);\n },\n\n /**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @static\n * @memberOf fabric.util\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\n removeFromArray: function(array, value) {\n var idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n },\n\n /**\n * Returns random number between 2 specified ones.\n * @static\n * @memberOf fabric.util\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Transforms degrees to radians.\n * @static\n * @memberOf fabric.util\n * @param {Number} degrees value in degrees\n * @return {Number} value in radians\n */\n degreesToRadians: function(degrees) {\n return degrees * PiBy180;\n },\n\n /**\n * Transforms radians to degrees.\n * @static\n * @memberOf fabric.util\n * @param {Number} radians value in radians\n * @return {Number} value in degrees\n */\n radiansToDegrees: function(radians) {\n return radians / PiBy180;\n },\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} point The point to rotate\n * @param {fabric.Point} origin The origin of the rotation\n * @param {Number} radians The radians of the angle for the rotation\n * @return {fabric.Point} The new rotated point\n */\n rotatePoint: function(point, origin, radians) {\n var newPoint = new fabric.Point(point.x - origin.x, point.y - origin.y),\n v = fabric.util.rotateVector(newPoint, radians);\n return new fabric.Point(v.x, v.y).addEquals(origin);\n },\n\n /**\n * Rotates `vector` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {Object} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Object} The new rotated point\n */\n rotateVector: function(vector, radians) {\n var sin = fabric.util.sin(radians),\n cos = fabric.util.cos(radians),\n rx = vector.x * cos - vector.y * sin,\n ry = vector.x * sin + vector.y * cos;\n return {\n x: rx,\n y: ry\n };\n },\n\n /**\n * Creates a vetor from points represented as a point\n * @static\n * @memberOf fabric.util\n *\n * @typedef {Object} Point\n * @property {number} x\n * @property {number} y\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\n createVector: function (from, to) {\n return new fabric.Point(to.x - from.x, to.y - from.y);\n },\n\n /**\n * Calculates angle between 2 vectors using dot product\n * @static\n * @memberOf fabric.util\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radian between the vectors\n */\n calcAngleBetweenVectors: function (a, b) {\n return Math.acos((a.x * b.x + a.y * b.y) / (Math.hypot(a.x, a.y) * Math.hypot(b.x, b.y)));\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @param {Point} v\n * @returns {Point} vector representing the unit vector of pointing to the direction of `v`\n */\n getHatVector: function (v) {\n return new fabric.Point(v.x, v.y).multiply(1 / Math.hypot(v.x, v.y));\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @param {Point} A\n * @param {Point} B\n * @param {Point} C\n * @returns {{ vector: Point, angle: number }} vector representing the bisector of A and A's angle\n */\n getBisector: function (A, B, C) {\n var AB = fabric.util.createVector(A, B), AC = fabric.util.createVector(A, C);\n var alpha = fabric.util.calcAngleBetweenVectors(AB, AC);\n // check if alpha is relative to AB->BC\n var ro = fabric.util.calcAngleBetweenVectors(fabric.util.rotateVector(AB, alpha), AC);\n var phi = alpha * (ro === 0 ? 1 : -1) / 2;\n return {\n vector: fabric.util.getHatVector(fabric.util.rotateVector(AB, phi)),\n angle: alpha\n };\n },\n\n /**\n * Project stroke width on points returning 2 projections for each point as follows:\n * - `miter`: 2 points corresponding to the outer boundary and the inner boundary of stroke.\n * - `bevel`: 2 points corresponding to the bevel boundaries, tangent to the bisector.\n * - `round`: same as `bevel`\n * Used to calculate object's bounding box\n * @static\n * @memberOf fabric.util\n * @param {Point[]} points\n * @param {Object} options\n * @param {number} options.strokeWidth\n * @param {'miter'|'bevel'|'round'} options.strokeLineJoin\n * @param {number} options.strokeMiterLimit https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n * @param {boolean} options.strokeUniform\n * @param {number} options.scaleX\n * @param {number} options.scaleY\n * @param {boolean} [openPath] whether the shape is open or not, affects the calculations of the first and last points\n * @returns {fabric.Point[]} array of size 2n/4n of all suspected points\n */\n projectStrokeOnPoints: function (points, options, openPath) {\n var coords = [], s = options.strokeWidth / 2,\n strokeUniformScalar = options.strokeUniform ?\n new fabric.Point(1 / options.scaleX, 1 / options.scaleY) : new fabric.Point(1, 1),\n getStrokeHatVector = function (v) {\n var scalar = s / (Math.hypot(v.x, v.y));\n return new fabric.Point(v.x * scalar * strokeUniformScalar.x, v.y * scalar * strokeUniformScalar.y);\n };\n if (points.length <= 1) {return coords;}\n points.forEach(function (p, index) {\n var A = new fabric.Point(p.x, p.y), B, C;\n if (index === 0) {\n C = points[index + 1];\n B = openPath ? getStrokeHatVector(fabric.util.createVector(C, A)).addEquals(A) : points[points.length - 1];\n }\n else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? getStrokeHatVector(fabric.util.createVector(B, A)).addEquals(A) : points[0];\n }\n else {\n B = points[index - 1];\n C = points[index + 1];\n }\n var bisector = fabric.util.getBisector(A, B, C),\n bisectorVector = bisector.vector,\n alpha = bisector.angle,\n scalar,\n miterVector;\n if (options.strokeLineJoin === 'miter') {\n scalar = -s / Math.sin(alpha / 2);\n miterVector = new fabric.Point(\n bisectorVector.x * scalar * strokeUniformScalar.x,\n bisectorVector.y * scalar * strokeUniformScalar.y\n );\n if (Math.hypot(miterVector.x, miterVector.y) / s <= options.strokeMiterLimit) {\n coords.push(A.add(miterVector));\n coords.push(A.subtract(miterVector));\n return;\n }\n }\n scalar = -s * Math.SQRT2;\n miterVector = new fabric.Point(\n bisectorVector.x * scalar * strokeUniformScalar.x,\n bisectorVector.y * scalar * strokeUniformScalar.y\n );\n coords.push(A.add(miterVector));\n coords.push(A.subtract(miterVector));\n });\n return coords;\n },\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {fabric.Point} The transformed point\n */\n transformPoint: function(p, t, ignoreOffset) {\n if (ignoreOffset) {\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y,\n t[1] * p.x + t[3] * p.y\n );\n }\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y + t[4],\n t[1] * p.x + t[3] * p.y + t[5]\n );\n },\n\n /**\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\n * @param {Array} points 4 points array\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n * @return {Object} Object with left, top, width, height properties\n */\n makeBoundingBoxFromPoints: function(points, transform) {\n if (transform) {\n for (var i = 0; i < points.length; i++) {\n points[i] = fabric.util.transformPoint(points[i], transform);\n }\n }\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n minX = fabric.util.array.min(xPoints),\n maxX = fabric.util.array.max(xPoints),\n width = maxX - minX,\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n minY = fabric.util.array.min(yPoints),\n maxY = fabric.util.array.max(yPoints),\n height = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Invert transformation t\n * @static\n * @memberOf fabric.util\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\n invertTransform: function(t) {\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\n r[4] = -o.x;\n r[5] = -o.y;\n return r;\n },\n\n /**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @static\n * @memberOf fabric.util\n * @param {Number|String} number number to operate on\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\n * @return {Number}\n */\n toFixed: function(number, fractionDigits) {\n return parseFloat(Number(number).toFixed(fractionDigits));\n },\n\n /**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {Number|String} value number to operate on\n * @param {Number} fontSize\n * @return {Number|String}\n */\n parseUnit: function(value, fontSize) {\n var unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n if (!fontSize) {\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n switch (unit[0]) {\n case 'mm':\n return number * fabric.DPI / 25.4;\n\n case 'cm':\n return number * fabric.DPI / 2.54;\n\n case 'in':\n return number * fabric.DPI;\n\n case 'pt':\n return number * fabric.DPI / 72; // or * 4 / 3\n\n case 'pc':\n return number * fabric.DPI / 72 * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n },\n\n /**\n * Function which always returns `false`.\n * @static\n * @memberOf fabric.util\n * @return {Boolean}\n */\n falseFunction: function() {\n return false;\n },\n\n /**\n * Returns klass \"Class\" object of given namespace\n * @memberOf fabric.util\n * @param {String} type Type of object (eg. 'circle')\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @return {Object} klass \"Class\"\n */\n getKlass: function(type, namespace) {\n // capitalize first letter only\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n return fabric.util.resolveNamespace(namespace)[type];\n },\n\n /**\n * Returns array of attributes for given svg that fabric parses\n * @memberOf fabric.util\n * @param {String} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\n getSvgAttributes: function(type) {\n var attributes = [\n 'instantiated_by_use',\n 'style',\n 'id',\n 'class'\n ];\n switch (type) {\n case 'linearGradient':\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n break;\n case 'radialGradient':\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n break;\n case 'stop':\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n break;\n }\n return attributes;\n },\n\n /**\n * Returns object of given namespace\n * @memberOf fabric.util\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n * @return {Object} Object for given namespace (default fabric)\n */\n resolveNamespace: function(namespace) {\n if (!namespace) {\n return fabric;\n }\n\n var parts = namespace.split('.'),\n len = parts.length, i,\n obj = global || fabric.window;\n\n for (i = 0; i < len; ++i) {\n obj = obj[parts[i]];\n }\n\n return obj;\n },\n\n /**\n * Loads image element from given url and passes it to a callback\n * @memberOf fabric.util\n * @param {String} url URL representing an image\n * @param {Function} callback Callback; invoked with loaded image\n * @param {*} [context] Context to invoke callback in\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\n */\n loadImage: function(url, callback, context, crossOrigin) {\n if (!url) {\n callback && callback.call(context, url);\n return;\n }\n\n var img = fabric.util.createImage();\n\n /** @ignore */\n var onLoadCallback = function () {\n callback && callback.call(context, img, false);\n img = img.onload = img.onerror = null;\n };\n\n img.onload = onLoadCallback;\n /** @ignore */\n img.onerror = function() {\n fabric.log('Error loading ' + img.src);\n callback && callback.call(context, null, true);\n img = img.onload = img.onerror = null;\n };\n\n // data-urls appear to be buggy with crossOrigin\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n // see https://code.google.com/p/chromium/issues/detail?id=315152\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n // crossOrigin null is the same as not set.\n if (url.indexOf('data') !== 0 &&\n crossOrigin !== undefined &&\n crossOrigin !== null) {\n img.crossOrigin = crossOrigin;\n }\n\n // IE10 / IE11-Fix: SVG contents from data: URI\n // will only be available if the IMG is present\n // in the DOM (and visible)\n if (url.substring(0,14) === 'data:image/svg') {\n img.onload = null;\n fabric.util.loadImageInDom(img, onLoadCallback);\n }\n\n img.src = url;\n },\n\n /**\n * Attaches SVG image with data: URL to the dom\n * @memberOf fabric.util\n * @param {Object} img Image object with data:image/svg src\n * @param {Function} callback Callback; invoked with loaded image\n * @return {Object} DOM element (div containing the SVG image)\n */\n loadImageInDom: function(img, onLoadCallback) {\n var div = fabric.document.createElement('div');\n div.style.width = div.style.height = '1px';\n div.style.left = div.style.top = '-100%';\n div.style.position = 'absolute';\n div.appendChild(img);\n fabric.document.querySelector('body').appendChild(div);\n /**\n * Wrap in function to:\n * 1. Call existing callback\n * 2. Cleanup DOM\n */\n img.onload = function () {\n onLoadCallback();\n div.parentNode.removeChild(div);\n div = null;\n };\n },\n\n /**\n * Creates corresponding fabric instances from their object representations\n * @static\n * @memberOf fabric.util\n * @param {Array} objects Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @param {Function} reviver Method for further parsing of object elements,\n * called after each fabric object created.\n */\n enlivenObjects: function(objects, callback, namespace, reviver) {\n objects = objects || [];\n\n var enlivenedObjects = [],\n numLoadedObjects = 0,\n numTotalObjects = objects.length;\n\n function onLoaded() {\n if (++numLoadedObjects === numTotalObjects) {\n callback && callback(enlivenedObjects.filter(function(obj) {\n // filter out undefined objects (objects that gave error)\n return obj;\n }));\n }\n }\n\n if (!numTotalObjects) {\n callback && callback(enlivenedObjects);\n return;\n }\n\n objects.forEach(function (o, index) {\n // if sparse array\n if (!o || !o.type) {\n onLoaded();\n return;\n }\n var klass = fabric.util.getKlass(o.type, namespace);\n klass.fromObject(o, function (obj, error) {\n error || (enlivenedObjects[index] = obj);\n reviver && reviver(o, obj, error);\n onLoaded();\n });\n });\n },\n\n /**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @see {@link fabric.Object.ENLIVEN_PROPS}\n * @param {Object} object\n * @param {Object} [context] assign enlived props to this object (pass null to skip this)\n * @param {(objects:fabric.Object[]) => void} callback\n */\n enlivenObjectEnlivables: function (object, context, callback) {\n var enlivenProps = fabric.Object.ENLIVEN_PROPS.filter(function (key) { return !!object[key]; });\n fabric.util.enlivenObjects(enlivenProps.map(function (key) { return object[key]; }), function (enlivedProps) {\n var objects = {};\n enlivenProps.forEach(function (key, index) {\n objects[key] = enlivedProps[index];\n context && (context[key] = enlivedProps[index]);\n });\n callback && callback(objects);\n });\n },\n\n /**\n * Create and wait for loading of patterns\n * @static\n * @memberOf fabric.util\n * @param {Array} patterns Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * called after each fabric object created.\n */\n enlivenPatterns: function(patterns, callback) {\n patterns = patterns || [];\n\n function onLoaded() {\n if (++numLoadedPatterns === numPatterns) {\n callback && callback(enlivenedPatterns);\n }\n }\n\n var enlivenedPatterns = [],\n numLoadedPatterns = 0,\n numPatterns = patterns.length;\n\n if (!numPatterns) {\n callback && callback(enlivenedPatterns);\n return;\n }\n\n patterns.forEach(function (p, index) {\n if (p && p.source) {\n new fabric.Pattern(p, function(pattern) {\n enlivenedPatterns[index] = pattern;\n onLoaded();\n });\n }\n else {\n enlivenedPatterns[index] = p;\n onLoaded();\n }\n });\n },\n\n /**\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @memberOf fabric.util\n * @param {Array} elements SVG elements to group\n * @param {Object} [options] Options object\n * @param {String} path Value to set sourcePath to\n * @return {fabric.Object|fabric.Group}\n */\n groupSVGElements: function(elements, options, path) {\n var object;\n if (elements && elements.length === 1) {\n if (typeof path !== 'undefined') {\n elements[0].sourcePath = path;\n }\n return elements[0];\n }\n if (options) {\n if (options.width && options.height) {\n options.centerPoint = {\n x: options.width / 2,\n y: options.height / 2\n };\n }\n else {\n delete options.width;\n delete options.height;\n }\n }\n object = new fabric.Group(elements, options);\n if (typeof path !== 'undefined') {\n object.sourcePath = path;\n }\n return object;\n },\n\n /**\n * Populates an object with properties of another object\n * @static\n * @memberOf fabric.util\n * @param {Object} source Source object\n * @param {Object} destination Destination object\n * @return {Array} properties Properties names to include\n */\n populateWithProperties: function(source, destination, properties) {\n if (properties && Array.isArray(properties)) {\n for (var i = 0, len = properties.length; i < len; i++) {\n if (properties[i] in source) {\n destination[properties[i]] = source[properties[i]];\n }\n }\n }\n },\n\n /**\n * Creates canvas element\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n createCanvasElement: function() {\n return fabric.document.createElement('canvas');\n },\n\n /**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n copyCanvasElement: function(canvas) {\n var newCanvas = fabric.util.createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n return newCanvas;\n },\n\n /**\n * since 2.6.0 moved from canvas instance to utility.\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @static\n * @memberOf fabric.util\n * @return {String} data url\n */\n toDataURL: function(canvasEl, format, quality) {\n return canvasEl.toDataURL('image/' + format, quality);\n },\n\n /**\n * Creates image element (works on client and node)\n * @static\n * @memberOf fabric.util\n * @return {HTMLImageElement} HTML image element\n */\n createImage: function() {\n return fabric.document.createElement('img');\n },\n\n /**\n * Multiply matrix A by matrix B to nest transformations\n * @static\n * @memberOf fabric.util\n * @param {Array} a First transformMatrix\n * @param {Array} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {Array} The product of the two transform matrices\n */\n multiplyTransformMatrices: function(a, b, is2x2) {\n // Matrix multiply a * b\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\n ];\n },\n\n /**\n * Decomposes standard 2x3 matrix into transform components\n * @static\n * @memberOf fabric.util\n * @param {Array} a transformMatrix\n * @return {Object} Components of transform\n */\n qrDecompose: function(a) {\n var angle = atan2(a[1], a[0]),\n denom = pow(a[0], 2) + pow(a[1], 2),\n scaleX = sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\n return {\n angle: angle / PiBy180,\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX / PiBy180,\n skewY: 0,\n translateX: a[4],\n translateY: a[5]\n };\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle] angle in degrees\n * @return {Number[]} transform matrix\n */\n calcRotateMatrix: function(options) {\n if (!options.angle) {\n return fabric.iMatrix.concat();\n }\n var theta = fabric.util.degreesToRadians(options.angle),\n cos = fabric.util.cos(theta),\n sin = fabric.util.sin(theta);\n return [cos, sin, -sin, cos, 0, 0];\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\n calcDimensionsMatrix: function(options) {\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n scaleMatrix = [\n options.flipX ? -scaleX : scaleX,\n 0,\n 0,\n options.flipY ? -scaleY : scaleY,\n 0,\n 0],\n multiply = fabric.util.multiplyTransformMatrices,\n degreesToRadians = fabric.util.degreesToRadians;\n if (options.skewX) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\n true);\n }\n if (options.skewY) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\n true);\n }\n return scaleMatrix;\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\n composeMatrix: function(options) {\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n multiply = fabric.util.multiplyTransformMatrices;\n if (options.angle) {\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n }\n if (options.scaleX !== 1 || options.scaleY !== 1 ||\n options.skewX || options.skewY || options.flipX || options.flipY) {\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n }\n return matrix;\n },\n\n /**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to transform\n */\n resetObjectTransform: function (target) {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n },\n\n /**\n * Extract Object transform values\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to read from\n * @return {Object} Components of transform\n */\n saveObjectTransform: function (target) {\n return {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top\n };\n },\n\n /**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n * @param {Number} tolerance Tolerance\n */\n isTransparent: function(ctx, x, y, tolerance) {\n\n // If tolerance is > 0 adjust start coords to take into account.\n // If moves off Canvas fix to 0\n if (tolerance > 0) {\n if (x > tolerance) {\n x -= tolerance;\n }\n else {\n x = 0;\n }\n if (y > tolerance) {\n y -= tolerance;\n }\n else {\n y = 0;\n }\n }\n\n var _isTransparent = true, i, temp,\n imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\n l = imageData.data.length;\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (i = 3; i < l; i += 4) {\n temp = imageData.data[i];\n _isTransparent = temp <= 0;\n if (_isTransparent === false) {\n break; // Stop if colour found\n }\n }\n\n imageData = null;\n\n return _isTransparent;\n },\n\n /**\n * Parse preserveAspectRatio attribute from element\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\n parsePreserveAspectRatioAttribute: function(attribute) {\n var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\n aspectRatioAttrs = attribute.split(' '), align;\n\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\n meetOrSlice = aspectRatioAttrs.pop();\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n align = meetOrSlice;\n meetOrSlice = 'meet';\n }\n else if (aspectRatioAttrs.length) {\n align = aspectRatioAttrs.pop();\n }\n }\n //divide align in alignX and alignY\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n return {\n meetOrSlice: meetOrSlice,\n alignX: alignX,\n alignY: alignY\n };\n },\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @memberOf fabric.util\n * @param {String} [fontFamily] font family to clear\n */\n clearFabricFontCache: function(fontFamily) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n fabric.charWidthsCache = { };\n }\n else if (fabric.charWidthsCache[fontFamily]) {\n delete fabric.charWidthsCache[fontFamily];\n }\n },\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Number} ar aspect ratio\n * @param {Number} maximumArea Maximum area you want to achieve\n * @return {Object.x} Limited dimensions by X\n * @return {Object.y} Limited dimensions by Y\n */\n limitDimsByArea: function(ar, maximumArea) {\n var roughWidth = Math.sqrt(maximumArea * ar),\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n return { x: Math.floor(roughWidth), y: perfLimitSizeY };\n },\n\n capValue: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\n findScaleToFit: function(source, destination) {\n return Math.min(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\n findScaleToCover: function(source, destination) {\n return Math.max(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @memberOf fabric.util\n * @param {Array} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n * @return {Object.y} Limited dimensions by Y\n */\n matrixToSVG: function(transform) {\n return 'matrix(' + transform.map(function(value) {\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n }).join(' ') + ')';\n },\n\n /**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transfrom that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n removeTransformFromObject: function(object, transform) {\n var inverted = fabric.util.invertTransform(transform),\n finalTransform = fabric.util.multiplyTransformMatrices(inverted, object.calcOwnMatrix());\n fabric.util.applyTransformToObject(object, finalTransform);\n },\n\n /**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n addTransformToObject: function(object, transform) {\n fabric.util.applyTransformToObject(\n object,\n fabric.util.multiplyTransformMatrices(transform, object.calcOwnMatrix())\n );\n },\n\n /**\n * discard an object transform state and apply the one from the matrix.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n applyTransformToObject: function(object, transform) {\n var options = fabric.util.qrDecompose(transform),\n center = new fabric.Point(options.translateX, options.translateY);\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', options.scaleX);\n object.set('scaleY', options.scaleY);\n object.skewX = options.skewX;\n object.skewY = options.skewY;\n object.angle = options.angle;\n object.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform\n * described in options.\n * Use to calculate the boxes around objects for controls.\n * @memberOf fabric.util\n * @param {Number} width\n * @param {Number} height\n * @param {Object} options\n * @param {Number} options.scaleX\n * @param {Number} options.scaleY\n * @param {Number} options.skewX\n * @param {Number} options.skewY\n * @return {Object.x} width of containing\n * @return {Object.y} height of containing\n */\n sizeAfterTransform: function(width, height, options) {\n var dimX = width / 2, dimY = height / 2,\n points = [\n {\n x: -dimX,\n y: -dimY\n },\n {\n x: dimX,\n y: -dimY\n },\n {\n x: -dimX,\n y: dimY\n },\n {\n x: dimX,\n y: dimY\n }],\n transformMatrix = fabric.util.calcDimensionsMatrix(options),\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n return {\n x: bbox.width,\n y: bbox.height,\n };\n },\n\n /**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\n mergeClipPaths: function (c1, c2) {\n var a = c1, b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n fabric.util.applyTransformToObject(\n b,\n fabric.util.multiplyTransformMatrices(\n fabric.util.invertTransform(a.calcTransformMatrix()),\n b.calcTransformMatrix()\n )\n );\n // assign the `inverted` prop to the wrapping group\n var inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new fabric.Group([a], { clipPath: b, inverted: inverted });\n },\n\n /**\n * @memberOf fabric.util\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\n hasStyleChanged: function(prevStyle, thisStyle, forTextSpans) {\n forTextSpans = forTextSpans || false;\n return (prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||\n prevStyle.deltaY !== thisStyle.deltaY) ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n },\n\n /**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @memberOf fabric.util\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\n stylesToArray: function(styles, text) {\n // clone style structure to prevent mutation\n var styles = fabric.util.object.clone(styles, true),\n textLines = text.split('\\n'),\n charIndex = -1, prevStyle = {}, stylesArray = [];\n //loop through each textLine\n for (var i = 0; i < textLines.length; i++) {\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total\n charIndex += textLines[i].length;\n continue;\n }\n //loop through each character of the current line\n for (var c = 0; c < textLines[i].length; c++) {\n charIndex++;\n var thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle && Object.keys(thisStyle).length > 0) {\n var styleChanged = fabric.util.hasStyleChanged(prevStyle, thisStyle, true);\n if (styleChanged) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle\n });\n }\n else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n },\n\n /**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @memberOf fabric.util\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\n stylesFromArray: function(styles, text) {\n if (!Array.isArray(styles)) {\n return styles;\n }\n var textLines = text.split('\\n'),\n charIndex = -1, styleIndex = 0, stylesObject = {};\n //loop through each textLine\n for (var i = 0; i < textLines.length; i++) {\n //loop through each character of the current line\n for (var c = 0; c < textLines[i].length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (styles[styleIndex]\n && styles[styleIndex].start <= charIndex\n && charIndex < styles[styleIndex].end) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = Object.assign({}, styles[styleIndex].style);\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n }\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n var _join = Array.prototype.join,\n commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n },\n repeatedCommands = {\n m: 'l',\n M: 'L'\n };\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n var costh2 = fabric.util.cos(th2),\n sinth2 = fabric.util.sin(th2),\n costh3 = fabric.util.cos(th3),\n sinth3 = fabric.util.sin(th3),\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\n cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\n cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\n cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\n\n return ['C',\n cp1X, cp1Y,\n cp2X, cp2Y,\n toX, toY\n ];\n }\n\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n */\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n var PI = Math.PI, th = rotateX * PI / 180,\n sinTh = fabric.util.sin(th),\n cosTh = fabric.util.cos(th),\n fromX = 0, fromY = 0;\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n root = 0;\n\n if (pl < 0) {\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\n rx *= s;\n ry *= s;\n }\n else {\n root = (large === sweep ? -1.0 : 1.0) *\n Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\n }\n\n var cx = root * rx * py / ry,\n cy = -root * ry * px / rx,\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n }\n else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n result = [], mDelta = dtheta / segments,\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n th3 = mTheta + mDelta;\n\n for (var i = 0; i < segments; i++) {\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n }\n\n /*\n * Private\n */\n function calcVectorAngle(ux, uy, vx, vy) {\n var ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n }\n else {\n return 2 * Math.PI - (ta - tb);\n }\n }\n\n /**\n * Calculate bounding box of a beziercurve\n * @param {Number} x0 starting point\n * @param {Number} y0\n * @param {Number} x1 first control point\n * @param {Number} y1\n * @param {Number} x2 secondo control point\n * @param {Number} y2\n * @param {Number} x3 end of bezier\n * @param {Number} y3\n */\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\n // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n var argsString;\n if (fabric.cachesBoundsOfCurve) {\n argsString = _join.call(arguments);\n if (fabric.boundsOfCurveCache[argsString]) {\n return fabric.boundsOfCurveCache[argsString];\n }\n }\n\n var sqrt = Math.sqrt,\n min = Math.min, max = Math.max,\n abs = Math.abs, tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n\n for (var i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n sqrtb2ac = sqrt(b2ac);\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length, jlen = j, mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[0][j] = x;\n\n y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n var result = [\n {\n x: min.apply(null, bounds[0]),\n y: min.apply(null, bounds[1])\n },\n {\n x: max.apply(null, bounds[0]),\n y: max.apply(null, bounds[1])\n }\n ];\n if (fabric.cachesBoundsOfCurve) {\n fabric.boundsOfCurveCache[argsString] = result;\n }\n return result;\n }\n\n /**\n * Converts arc to a bunch of bezier curves\n * @param {Number} fx starting point x\n * @param {Number} fy starting point y\n * @param {Array} coords Arc command\n */\n function fromArcToBeziers(fx, fy, coords) {\n var rx = coords[1],\n ry = coords[2],\n rot = coords[3],\n large = coords[4],\n sweep = coords[5],\n tx = coords[6],\n ty = coords[7],\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n };\n\n /**\n * This function take a parsed SVG path and make it simpler for fabricJS logic.\n * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )\n * S converted in C, T converted in Q, A converted in C.\n * @param {Array} path the array of commands of a parsed svg path for fabric.Path\n * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path\n */\n function makePathSimpler(path) {\n // x and y represent the last point of the path. the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n var x = 0, y = 0, len = path.length,\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n x1 = 0, y1 = 0, current, i, converted,\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n destinationPath = [], previous, controlX, controlY;\n for (i = 0; i < len; ++i) {\n converted = false;\n current = path[i].slice(0);\n switch (current[0]) { // first letter\n case 'l': // lineto, relative\n current[0] = 'L';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n current[0] = 'L';\n current[2] = y;\n x = current[1];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n current[0] = 'L';\n y = current[1];\n current[1] = x;\n current[2] = y;\n break;\n case 'm': // moveTo, relative\n current[0] = 'M';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n break;\n case 'c': // bezierCurveTo, relative\n current[0] = 'C';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[0] = 'S';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n current[0] = 'C';\n current[5] = current[3];\n current[6] = current[4];\n current[3] = current[1];\n current[4] = current[2];\n current[1] = controlX;\n current[2] = controlY;\n // current[3] and current[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = current[3];\n controlY = current[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[0] = 'Q';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[0] = 'T';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n current[0] = 'Q';\n x = current[1];\n y = current[2];\n current[1] = controlX;\n current[2] = controlY;\n current[3] = x;\n current[4] = y;\n break;\n case 'a':\n current[0] = 'A';\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n converted = true;\n destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n break;\n default:\n }\n if (!converted) {\n destinationPath.push(current);\n }\n previous = current[0];\n }\n return destinationPath;\n };\n\n /**\n * Calc length from point x1,y1 to x2,y2\n * @param {Number} x1 starting point x\n * @param {Number} y1 starting point y\n * @param {Number} x2 starting point x\n * @param {Number} y2 starting point y\n * @return {Number} length of segment\n */\n function calcLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n // functions for the Cubic beizer\n // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\n function CB1(t) {\n return t * t * t;\n }\n function CB2(t) {\n return 3 * t * t * (1 - t);\n }\n function CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n }\n function CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n\n function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function(pct) {\n var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);\n return {\n x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,\n y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4\n };\n };\n }\n\n function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +\n (3 * pct * pct * (p4x - p3x)),\n tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +\n (3 * pct * pct * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n function QB1(t) {\n return t * t;\n }\n\n function QB2(t) {\n return 2 * t * (1 - t);\n }\n\n function QB3(t) {\n return (1 - t) * (1 - t);\n }\n\n function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function(pct) {\n var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);\n return {\n x: p3x * c1 + p2x * c2 + p1x * c3,\n y: p3y * c1 + p2y * c2 + p1y * c3\n };\n };\n }\n\n function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),\n tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n\n // this will run over a path segment ( a cubic or quadratic segment) and approximate it\n // with 100 segemnts. This will good enough to calculate the length of the curve\n function pathIterator(iterator, x1, y1) {\n var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;\n for (perc = 1; perc <= 100; perc += 1) {\n p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n }\n\n /**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {Number} distance from starting point, in pixels.\n * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\n function findPercentageForDistance(segInfo, distance) {\n var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },\n p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if ((nextLen + tmpLen) > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n }\n else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n p.angle = angleFinder(lastPerc);\n return p;\n }\n\n /**\n * Run over a parsed and simplifed path and extrac some informations.\n * informations are length of each command and starting point\n * @param {Array} path fabricJS parsed path commands\n * @return {Array} path commands informations\n */\n function getPathSegmentsInfo(path) {\n var totalLength = 0, len = path.length, current,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;\n for (var i = 0; i < len; i++) {\n current = path[i];\n tempInfo = {\n x: x1,\n y: y1,\n command: current[0],\n };\n switch (current[0]) { //first letter\n case 'M':\n tempInfo.length = 0;\n x2 = x1 = current[1];\n y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n case 'z':\n // we add those in order to ease calculations later\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n }\n\n function getPointOnPath(path, distance, infos) {\n if (!infos) {\n infos = getPathSegmentsInfo(path);\n }\n var i = 0;\n while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {\n distance -= infos[i].length;\n i++;\n }\n // var distance = infos[infos.length - 1] * perc;\n var segInfo = infos[i], segPercent = distance / segInfo.length,\n command = segInfo.command, segment = path[i], info;\n\n switch (command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n case 'z':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segInfo.destX, segInfo.destY),\n segPercent\n );\n info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);\n return info;\n case 'L':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segment[1], segment[2]),\n segPercent\n );\n info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);\n return info;\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n }\n }\n\n /**\n *\n * @param {string} pathString\n * @return {(string|number)[][]} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n *\n */\n function parsePath(pathString) {\n var result = [],\n coords = [],\n currentPath,\n parsed,\n re = fabric.rePathCommand,\n rNumber = '[-+]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.?)(?:[eE][-+]?\\\\d+)?\\\\s*',\n rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,\n rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',\n rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +\n rNumberCommaWsp + '?(' + rNumber + ')',\n regArcArgumentSequence = new RegExp(rArcSeq, 'g'),\n match,\n coordsStr,\n // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n path;\n if (!pathString || !pathString.match) {\n return result;\n }\n path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n for (var i = 0, coordsParsed, len = path.length; i < len; i++) {\n currentPath = path[i];\n\n coordsStr = currentPath.slice(1).trim();\n coords.length = 0;\n\n var command = currentPath.charAt(0);\n coordsParsed = [command];\n\n if (command.toLowerCase() === 'a') {\n // arcs have special flags that apparently don't require spaces so handle special\n for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {\n for (var j = 1; j < args.length; j++) {\n coords.push(args[j]);\n }\n }\n }\n else {\n while ((match = re.exec(coordsStr))) {\n coords.push(match[0]);\n }\n }\n\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n coordsParsed.push(parsed);\n }\n }\n\n var commandLength = commandLengths[command.toLowerCase()],\n repeatedCommand = repeatedCommands[command] || command;\n\n if (coordsParsed.length - 1 > commandLength) {\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n command = repeatedCommand;\n }\n }\n else {\n result.push(coordsParsed);\n }\n }\n\n return result;\n };\n\n /**\n *\n * Converts points to a smooth SVG path\n * @param {{ x: number,y: number }[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\n function getSmoothPathFromPoints(points, correction) {\n var path = [], i,\n p1 = new fabric.Point(points[0].x, points[0].y),\n p2 = new fabric.Point(points[1].x, points[1].y),\n len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\n correction = correction || 0;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n var midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if ((i + 1) < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);\n return path;\n }\n /**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {Array} path fabricJS parsed and simplified path commands\n * @param {Array} transform matrix that represent the transformation\n * @param {Object} [pathOffset] the fabric.Path pathOffset\n * @param {Number} pathOffset.x\n * @param {Number} pathOffset.y\n * @returns {Array} the transformed path\n */\n function transformPath(path, transform, pathOffset) {\n if (pathOffset) {\n transform = fabric.util.multiplyTransformMatrices(\n transform,\n [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]\n );\n }\n return path.map(function(pathSegment) {\n var newSegment = pathSegment.slice(0), point = {};\n for (var i = 1; i < pathSegment.length - 1; i += 2) {\n point.x = pathSegment[i];\n point.y = pathSegment[i + 1];\n point = fabric.util.transformPoint(point, transform);\n newSegment[i] = point.x;\n newSegment[i + 1] = point.y;\n }\n return newSegment;\n });\n }\n\n /**\n * Join path commands to go back to svg format\n * @param {Array} pathData fabricJS parsed path commands\n * @return {String} joined path 'M 0 0 L 20 30'\n */\n fabric.util.joinPath = function(pathData) {\n return pathData.map(function (segment) { return segment.join(' '); }).join(' ');\n };\n fabric.util.parsePath = parsePath;\n fabric.util.makePathSimpler = makePathSimpler;\n fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;\n fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n fabric.util.getPointOnPath = getPointOnPath;\n fabric.util.transformPath = transformPath;\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice;\n\n /**\n * Invokes method on all items in a given array\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} method Name of a method to invoke\n * @return {Array}\n */\n function invoke(array, method) {\n var args = slice.call(arguments, 2), result = [];\n for (var i = 0, len = array.length; i < len; i++) {\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n }\n return result;\n }\n\n /**\n * Finds maximum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function max(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 >= value2;\n });\n }\n\n /**\n * Finds minimum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function min(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 < value2;\n });\n }\n\n /**\n * @private\n */\n function fill(array, value) {\n var k = array.length;\n while (k--) {\n array[k] = value;\n }\n return array;\n }\n\n /**\n * @private\n */\n function find(array, byProperty, condition) {\n if (!array || array.length === 0) {\n return;\n }\n\n var i = array.length - 1,\n result = byProperty ? array[i][byProperty] : array[i];\n if (byProperty) {\n while (i--) {\n if (condition(array[i][byProperty], result)) {\n result = array[i][byProperty];\n }\n }\n }\n else {\n while (i--) {\n if (condition(array[i], result)) {\n result = array[i];\n }\n }\n }\n return result;\n }\n\n /**\n * @namespace fabric.util.array\n */\n fabric.util.array = {\n fill: fill,\n invoke: invoke,\n min: min,\n max: max\n };\n\n})();\n\n\n(function() {\n /**\n * Copies all enumerable properties of one js object to another\n * this does not and cannot compete with generic utils.\n * Does not clone or extend fabric.Object subclasses.\n * This is mostly for internal use and has extra handling for fabricJS objects\n * it skips the canvas and group properties in deep cloning.\n * @memberOf fabric.util.object\n * @param {Object} destination Where to copy to\n * @param {Object} source Where to copy from\n * @param {Boolean} [deep] Whether to extend nested objects\n * @return {Object}\n */\n\n function extend(destination, source, deep) {\n // JScript DontEnum bug is not taken care of\n // the deep clone is for internal use, is not meant to avoid\n // javascript traps or cloning html element or self referenced objects.\n if (deep) {\n if (!fabric.isLikelyNode && source instanceof Element) {\n // avoid cloning deep images, canvases,\n destination = source;\n }\n else if (source instanceof Array) {\n destination = [];\n for (var i = 0, len = source.length; i < len; i++) {\n destination[i] = extend({ }, source[i], deep);\n }\n }\n else if (source && typeof source === 'object') {\n for (var property in source) {\n if (property === 'canvas' || property === 'group') {\n // we do not want to clone this props at all.\n // we want to keep the keys in the copy\n destination[property] = null;\n }\n else if (source.hasOwnProperty(property)) {\n destination[property] = extend({ }, source[property], deep);\n }\n }\n }\n else {\n // this sounds odd for an extend but is ok for recursive use\n destination = source;\n }\n }\n else {\n for (var property in source) {\n destination[property] = source[property];\n }\n }\n return destination;\n }\n\n /**\n * Creates an empty object and copies all enumerable properties of another object to it\n * This method is mostly for internal use, and not intended for duplicating shapes in canvas. \n * @memberOf fabric.util.object\n * @param {Object} object Object to clone\n * @param {Boolean} [deep] Whether to clone nested objects\n * @return {Object}\n */\n\n //TODO: this function return an empty object if you try to clone null\n function clone(object, deep) {\n return extend({ }, object, deep);\n }\n\n /** @namespace fabric.util.object */\n fabric.util.object = {\n extend: extend,\n clone: clone\n };\n fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n\n\n(function() {\n\n /**\n * Camelizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to camelize\n * @return {String} Camelized version of a string\n */\n function camelize(string) {\n return string.replace(/-+(.)?/g, function(match, character) {\n return character ? character.toUpperCase() : '';\n });\n }\n\n /**\n * Capitalizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\n function capitalize(string, firstLetterOnly) {\n return string.charAt(0).toUpperCase() +\n (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n }\n\n /**\n * Escapes XML in a string\n * @memberOf fabric.util.string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\n function escapeXml(string) {\n return string.replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n /**\n * Divide a string in the user perceived single units\n * @memberOf fabric.util.string\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\n function graphemeSplit(textstring) {\n var i = 0, chr, graphemes = [];\n for (i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr);\n }\n return graphemes;\n }\n\n // taken from mdn in the charAt doc page.\n function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xD800 || code > 0xDFFF) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 <= code && code <= 0xDBFF) {\n if (str.length <= (i + 1)) {\n throw 'High surrogate without following low surrogate';\n }\n var next = str.charCodeAt(i + 1);\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n var prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 > prev || prev > 0xDBFF) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n }\n\n\n /**\n * String utilities\n * @namespace fabric.util.string\n */\n fabric.util.string = {\n camelize: camelize,\n capitalize: capitalize,\n escapeXml: escapeXml,\n graphemeSplit: graphemeSplit\n };\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice, emptyFunction = function() { },\n\n IS_DONTENUM_BUGGY = (function() {\n for (var p in { toString: 1 }) {\n if (p === 'toString') {\n return false;\n }\n }\n return true;\n })(),\n\n /** @ignore */\n addMethods = function(klass, source, parent) {\n for (var property in source) {\n\n if (property in klass.prototype &&\n typeof klass.prototype[property] === 'function' &&\n (source[property] + '').indexOf('callSuper') > -1) {\n\n klass.prototype[property] = (function(property) {\n return function() {\n\n var superclass = this.constructor.superclass;\n this.constructor.superclass = parent;\n var returnValue = source[property].apply(this, arguments);\n this.constructor.superclass = superclass;\n\n if (property !== 'initialize') {\n return returnValue;\n }\n };\n })(property);\n }\n else {\n klass.prototype[property] = source[property];\n }\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString !== Object.prototype.toString) {\n klass.prototype.toString = source.toString;\n }\n if (source.valueOf !== Object.prototype.valueOf) {\n klass.prototype.valueOf = source.valueOf;\n }\n }\n }\n };\n\n function Subclass() { }\n\n function callSuper(methodName) {\n var parentMethod = null,\n _this = this;\n\n // climb prototype chain to find method not equal to callee's method\n while (_this.constructor.superclass) {\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\n if (_this[methodName] !== superClassMethod) {\n parentMethod = superClassMethod;\n break;\n }\n // eslint-disable-next-line\n _this = _this.constructor.superclass.prototype;\n }\n\n if (!parentMethod) {\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n }\n\n return (arguments.length > 1)\n ? parentMethod.apply(this, slice.call(arguments, 1))\n : parentMethod.call(this);\n }\n\n /**\n * Helper for creation of \"classes\".\n * @memberOf fabric.util\n * @param {Function} [parent] optional \"Class\" to inherit from\n * @param {Object} [properties] Properties shared by all instances of this class\n * (be careful modifying objects defined here as this would affect all instances)\n */\n function createClass() {\n var parent = null,\n properties = slice.call(arguments, 0);\n\n if (typeof properties[0] === 'function') {\n parent = properties.shift();\n }\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n Subclass.prototype = parent.prototype;\n klass.prototype = new Subclass();\n parent.subclasses.push(klass);\n }\n for (var i = 0, length = properties.length; i < length; i++) {\n addMethods(klass, properties[i], parent);\n }\n if (!klass.prototype.initialize) {\n klass.prototype.initialize = emptyFunction;\n }\n klass.prototype.constructor = klass;\n klass.prototype.callSuper = callSuper;\n return klass;\n }\n\n fabric.util.createClass = createClass;\n})();\n\n\n(function () {\n // since ie11 can use addEventListener but they do not support options, i need to check\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent,\n touchEvents = ['touchstart', 'touchmove', 'touchend'];\n /**\n * Adds an event listener to an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.addListener = function(element, eventName, handler, options) {\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n /**\n * Removes an event listener from an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.removeListener = function(element, eventName, handler, options) {\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n function getTouchInfo(event) {\n var touchProp = event.changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event;\n }\n\n fabric.util.getPointer = function(event) {\n var element = event.target,\n scroll = fabric.util.getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return {\n x: _evt.clientX + scroll.left,\n y: _evt.clientY + scroll.top\n };\n };\n\n fabric.util.isTouchEvent = function(event) {\n return touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\n };\n})();\n\n\n(function () {\n\n /**\n * Cross-browser wrapper for setting element's style\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {Object} styles\n * @return {HTMLElement} Element that was passed as a first argument\n */\n function setStyle(element, styles) {\n var elementStyle = element.style;\n if (!elementStyle) {\n return element;\n }\n if (typeof styles === 'string') {\n element.style.cssText += ';' + styles;\n return styles.indexOf('opacity') > -1\n ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\n : element;\n }\n for (var property in styles) {\n if (property === 'opacity') {\n setOpacity(element, styles[property]);\n }\n else {\n var normalizedProperty = (property === 'float' || property === 'cssFloat')\n ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\n : property;\n elementStyle.setProperty(normalizedProperty, styles[property]);\n }\n }\n return element;\n }\n\n var parseEl = fabric.document.createElement('div'),\n supportsOpacity = typeof parseEl.style.opacity === 'string',\n supportsFilters = typeof parseEl.style.filter === 'string',\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n /** @ignore */\n setOpacity = function (element) { return element; };\n\n if (supportsOpacity) {\n /** @ignore */\n setOpacity = function(element, value) {\n element.style.opacity = value;\n return element;\n };\n }\n else if (supportsFilters) {\n /** @ignore */\n setOpacity = function(element, value) {\n var es = element.style;\n if (element.currentStyle && !element.currentStyle.hasLayout) {\n es.zoom = 1;\n }\n if (reOpacity.test(es.filter)) {\n value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\n es.filter = es.filter.replace(reOpacity, value);\n }\n else {\n es.filter += ' alpha(opacity=' + (value * 100) + ')';\n }\n return element;\n };\n }\n\n fabric.util.setStyle = setStyle;\n\n})();\n\n\n(function() {\n\n var _slice = Array.prototype.slice;\n\n /**\n * Takes id and returns an element with that id (if one exists in a document)\n * @memberOf fabric.util\n * @param {String|HTMLElement} id\n * @return {HTMLElement|null}\n */\n function getById(id) {\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n }\n\n var sliceCanConvertNodelists,\n /**\n * Converts an array-like object (e.g. arguments or NodeList) to an array\n * @memberOf fabric.util\n * @param {Object} arrayLike\n * @return {Array}\n */\n toArray = function(arrayLike) {\n return _slice.call(arrayLike, 0);\n };\n\n try {\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n }\n catch (err) { }\n\n if (!sliceCanConvertNodelists) {\n toArray = function(arrayLike) {\n var arr = new Array(arrayLike.length), i = arrayLike.length;\n while (i--) {\n arr[i] = arrayLike[i];\n }\n return arr;\n };\n }\n\n /**\n * Creates specified element with specified attributes\n * @memberOf fabric.util\n * @param {String} tagName Type of an element to create\n * @param {Object} [attributes] Attributes to set on an element\n * @return {HTMLElement} Newly created element\n */\n function makeElement(tagName, attributes) {\n var el = fabric.document.createElement(tagName);\n for (var prop in attributes) {\n if (prop === 'class') {\n el.className = attributes[prop];\n }\n else if (prop === 'for') {\n el.htmlFor = attributes[prop];\n }\n else {\n el.setAttribute(prop, attributes[prop]);\n }\n }\n return el;\n }\n\n /**\n * Adds class to an element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to add class to\n * @param {String} className Class to add to an element\n */\n function addClass(element, className) {\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n element.className += (element.className ? ' ' : '') + className;\n }\n }\n\n /**\n * Wraps element with another element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\n function wrapElement(element, wrapper, attributes) {\n if (typeof wrapper === 'string') {\n wrapper = makeElement(wrapper, attributes);\n }\n if (element.parentNode) {\n element.parentNode.replaceChild(wrapper, element);\n }\n wrapper.appendChild(element);\n return wrapper;\n }\n\n /**\n * Returns element scroll offsets\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\n function getScrollLeftTop(element) {\n\n var left = 0,\n top = 0,\n docElement = fabric.document.documentElement,\n body = fabric.document.body || {\n scrollLeft: 0, scrollTop: 0\n };\n\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (element && (element.parentNode || element.host)) {\n\n // Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n\n if (element === fabric.document) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n }\n else {\n left += element.scrollLeft || 0;\n top += element.scrollTop || 0;\n }\n\n if (element.nodeType === 1 && element.style.position === 'fixed') {\n break;\n }\n }\n\n return { left: left, top: top };\n }\n\n /**\n * Returns offset for a given element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\n function getElementOffset(element) {\n var docElem,\n doc = element && element.ownerDocument,\n box = { left: 0, top: 0 },\n offset = { left: 0, top: 0 },\n scrollLeftTop,\n offsetAttributes = {\n borderLeftWidth: 'left',\n borderTopWidth: 'top',\n paddingLeft: 'left',\n paddingTop: 'top'\n };\n\n if (!doc) {\n return offset;\n }\n\n for (var attr in offsetAttributes) {\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n }\n\n docElem = doc.documentElement;\n if ( typeof element.getBoundingClientRect !== 'undefined' ) {\n box = element.getBoundingClientRect();\n }\n\n scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\n };\n }\n\n /**\n * Returns style attribute value of a given element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get style attribute for\n * @param {String} attr Style attribute to get for element\n * @return {String} Style attribute value of the given element.\n */\n var getElementStyle;\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n getElementStyle = function(element, attr) {\n var style = fabric.document.defaultView.getComputedStyle(element, null);\n return style ? style[attr] : undefined;\n };\n }\n else {\n getElementStyle = function(element, attr) {\n var value = element.style[attr];\n if (!value && element.currentStyle) {\n value = element.currentStyle[attr];\n }\n return value;\n };\n }\n\n (function () {\n var style = fabric.document.documentElement.style,\n selectProp = 'userSelect' in style\n ? 'userSelect'\n : 'MozUserSelect' in style\n ? 'MozUserSelect'\n : 'WebkitUserSelect' in style\n ? 'WebkitUserSelect'\n : 'KhtmlUserSelect' in style\n ? 'KhtmlUserSelect'\n : '';\n\n /**\n * Makes element unselectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementUnselectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = fabric.util.falseFunction;\n }\n if (selectProp) {\n element.style[selectProp] = 'none';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = 'on';\n }\n return element;\n }\n\n /**\n * Makes element selectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementSelectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = null;\n }\n if (selectProp) {\n element.style[selectProp] = '';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = '';\n }\n return element;\n }\n\n fabric.util.makeElementUnselectable = makeElementUnselectable;\n fabric.util.makeElementSelectable = makeElementSelectable;\n })();\n\n function getNodeCanvas(element) {\n var impl = fabric.jsdomImplForWrapper(element);\n return impl._canvas || impl._image;\n };\n\n function cleanUpJsdomNode(element) {\n if (!fabric.isLikelyNode) {\n return;\n }\n var impl = fabric.jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n }\n\n function setImageSmoothing(ctx, value) {\n ctx.imageSmoothingEnabled = ctx.imageSmoothingEnabled || ctx.webkitImageSmoothingEnabled\n || ctx.mozImageSmoothingEnabled || ctx.msImageSmoothingEnabled || ctx.oImageSmoothingEnabled;\n ctx.imageSmoothingEnabled = value;\n }\n\n /**\n * setImageSmoothing sets the context imageSmoothingEnabled property.\n * Used by canvas and by ImageObject.\n * @memberOf fabric.util\n * @since 4.0.0\n * @param {HTMLRenderingContext2D} ctx to set on\n * @param {Boolean} value true or false\n */\n fabric.util.setImageSmoothing = setImageSmoothing;\n fabric.util.getById = getById;\n fabric.util.toArray = toArray;\n fabric.util.addClass = addClass;\n fabric.util.makeElement = makeElement;\n fabric.util.wrapElement = wrapElement;\n fabric.util.getScrollLeftTop = getScrollLeftTop;\n fabric.util.getElementOffset = getElementOffset;\n fabric.util.getNodeCanvas = getNodeCanvas;\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n\n})();\n\n\n(function() {\n\n function addParamToUrl(url, param) {\n return url + (/\\?/.test(url) ? '&' : '?') + param;\n }\n\n function emptyFn() { }\n\n /**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @memberOf fabric.util\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {String} [options.method=\"GET\"]\n * @param {String} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n function request(url, options) {\n options || (options = { });\n\n var method = options.method ? options.method.toUpperCase() : 'GET',\n onComplete = options.onComplete || function() { },\n xhr = new fabric.window.XMLHttpRequest(),\n body = options.body || options.parameters;\n\n /** @ignore */\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n onComplete(xhr);\n xhr.onreadystatechange = emptyFn;\n }\n };\n\n if (method === 'GET') {\n body = null;\n if (typeof options.parameters === 'string') {\n url = addParamToUrl(url, options.parameters);\n }\n }\n\n xhr.open(method, url, true);\n\n if (method === 'POST' || method === 'PUT') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.send(body);\n return xhr;\n }\n\n fabric.util.request = request;\n})();\n\n\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\nfabric.log = console.log;\n\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\nfabric.warn = console.warn;\n\n\n(function () {\n\n var extend = fabric.util.object.extend,\n clone = fabric.util.object.clone;\n\n /**\n * @typedef {Object} AnimationOptions\n * Animation of a value or list of values.\n * When using lists, think of something like this:\n * fabric.util.animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: function([a, b, c]) {\n * canvas.zoomToPoint({x: b, y: c}, a)\n * canvas.renderAll()\n * }\n * });\n * @example\n * @property {Function} [onChange] Callback; invoked on every value change\n * @property {Function} [onComplete] Callback; invoked when value change is completed\n * @example\n * // Note: startValue, endValue, and byValue must match the type\n * var animationOptions = { startValue: 0, endValue: 1, byValue: 0.25 }\n * var animationOptions = { startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] }\n * @property {number | number[]} [startValue=0] Starting value\n * @property {number | number[]} [endValue=100] Ending value\n * @property {number | number[]} [byValue=100] Value to modify the property by\n * @property {Function} [easing] Easing function\n * @property {Number} [duration=500] Duration of change (in ms)\n * @property {Function} [abort] Additional function with logic. If returns true, animation aborts.\n *\n * @typedef {() => void} CancelFunction\n *\n * @typedef {Object} AnimationCurrentState\n * @property {number | number[]} currentValue value in range [`startValue`, `endValue`]\n * @property {number} completionRate value in range [0, 1]\n * @property {number} durationRate value in range [0, 1]\n *\n * @typedef {(AnimationOptions & AnimationCurrentState & { cancel: CancelFunction }} AnimationContext\n */\n\n /**\n * Array holding all running animations\n * @memberof fabric\n * @type {AnimationContext[]}\n */\n var RUNNING_ANIMATIONS = [];\n fabric.util.object.extend(RUNNING_ANIMATIONS, {\n\n /**\n * cancel all running animations at the next requestAnimFrame\n * @returns {AnimationContext[]}\n */\n cancelAll: function () {\n var animations = this.splice(0);\n animations.forEach(function (animation) {\n animation.cancel();\n });\n return animations;\n },\n\n /**\n * cancel all running animations attached to canvas at the next requestAnimFrame\n * @param {fabric.Canvas} canvas\n * @returns {AnimationContext[]}\n */\n cancelByCanvas: function (canvas) {\n if (!canvas) {\n return [];\n }\n var cancelled = this.filter(function (animation) {\n return typeof animation.target === 'object' && animation.target.canvas === canvas;\n });\n cancelled.forEach(function (animation) {\n animation.cancel();\n });\n return cancelled;\n },\n\n /**\n * cancel all running animations for target at the next requestAnimFrame\n * @param {*} target\n * @returns {AnimationContext[]}\n */\n cancelByTarget: function (target) {\n var cancelled = this.findAnimationsByTarget(target);\n cancelled.forEach(function (animation) {\n animation.cancel();\n });\n return cancelled;\n },\n\n /**\n *\n * @param {CancelFunction} cancelFunc the function returned by animate\n * @returns {number}\n */\n findAnimationIndex: function (cancelFunc) {\n return this.indexOf(this.findAnimation(cancelFunc));\n },\n\n /**\n *\n * @param {CancelFunction} cancelFunc the function returned by animate\n * @returns {AnimationContext | undefined} animation's options object\n */\n findAnimation: function (cancelFunc) {\n return this.find(function (animation) {\n return animation.cancel === cancelFunc;\n });\n },\n\n /**\n *\n * @param {*} target the object that is assigned to the target property of the animation context\n * @returns {AnimationContext[]} array of animation options object associated with target\n */\n findAnimationsByTarget: function (target) {\n if (!target) {\n return [];\n }\n return this.filter(function (animation) {\n return animation.target === target;\n });\n }\n });\n\n function noop() {\n return false;\n }\n\n function defaultEasing(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {AnimationOptions} [options] Animation options\n * @example\n * // Note: startValue, endValue, and byValue must match the type\n * fabric.util.animate({ startValue: 0, endValue: 1, byValue: 0.25 })\n * fabric.util.animate({ startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] })\n * @returns {CancelFunction} cancel function\n */\n function animate(options) {\n options || (options = {});\n var cancel = false,\n context,\n removeFromRegistry = function () {\n var index = fabric.runningAnimations.indexOf(context);\n return index > -1 && fabric.runningAnimations.splice(index, 1)[0];\n };\n\n context = extend(clone(options), {\n cancel: function () {\n cancel = true;\n return removeFromRegistry();\n },\n currentValue: 'startValue' in options ? options.startValue : 0,\n completionRate: 0,\n durationRate: 0\n });\n fabric.runningAnimations.push(context);\n\n requestAnimFrame(function(timestamp) {\n var start = timestamp || +new Date(),\n duration = options.duration || 500,\n finish = start + duration, time,\n onChange = options.onChange || noop,\n abort = options.abort || noop,\n onComplete = options.onComplete || noop,\n easing = options.easing || defaultEasing,\n isMany = 'startValue' in options ? options.startValue.length > 0 : false,\n startValue = 'startValue' in options ? options.startValue : 0,\n endValue = 'endValue' in options ? options.endValue : 100,\n byValue = options.byValue || (isMany ? startValue.map(function(value, i) {\n return endValue[i] - startValue[i];\n }) : endValue - startValue);\n\n options.onStart && options.onStart();\n\n (function tick(ticktime) {\n time = ticktime || +new Date();\n var currentTime = time > finish ? duration : (time - start),\n timePerc = currentTime / duration,\n current = isMany ? startValue.map(function(_value, i) {\n return easing(currentTime, startValue[i], byValue[i], duration);\n }) : easing(currentTime, startValue, byValue, duration),\n valuePerc = isMany ? Math.abs((current[0] - startValue[0]) / byValue[0])\n : Math.abs((current - startValue) / byValue);\n // update context\n context.currentValue = isMany ? current.slice() : current;\n context.completionRate = valuePerc;\n context.durationRate = timePerc;\n if (cancel) {\n return;\n }\n if (abort(current, valuePerc, timePerc)) {\n removeFromRegistry();\n return;\n }\n if (time > finish) {\n // update context\n context.currentValue = isMany ? endValue.slice() : endValue;\n context.completionRate = 1;\n context.durationRate = 1;\n // execute callbacks\n onChange(isMany ? endValue.slice() : endValue, 1, 1);\n onComplete(endValue, 1, 1);\n removeFromRegistry();\n return;\n }\n else {\n onChange(current, valuePerc, timePerc);\n requestAnimFrame(tick);\n }\n })(start);\n });\n\n return context.cancel;\n }\n\n var _requestAnimFrame = fabric.window.requestAnimationFrame ||\n fabric.window.webkitRequestAnimationFrame ||\n fabric.window.mozRequestAnimationFrame ||\n fabric.window.oRequestAnimationFrame ||\n fabric.window.msRequestAnimationFrame ||\n function(callback) {\n return fabric.window.setTimeout(callback, 1000 / 60);\n };\n\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n\n /**\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n * @memberOf fabric.util\n * @param {Function} callback Callback to invoke\n * @param {DOMElement} element optional Element to associate with animation\n */\n function requestAnimFrame() {\n return _requestAnimFrame.apply(fabric.window, arguments);\n }\n\n function cancelAnimFrame() {\n return _cancelAnimFrame.apply(fabric.window, arguments);\n }\n\n fabric.util.animate = animate;\n fabric.util.requestAnimFrame = requestAnimFrame;\n fabric.util.cancelAnimFrame = cancelAnimFrame;\n fabric.runningAnimations = RUNNING_ANIMATIONS;\n})();\n\n\n(function() {\n // Calculate an in-between color. Returns a \"rgba()\" string.\n // Credit: Edwin Martin \n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n function calculateColor(begin, end, pos) {\n var color = 'rgba('\n + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\n + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\n + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\n\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n color += ')';\n return color;\n }\n\n /**\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {String} fromColor The starting color in hex or rgb(a) format.\n * @param {String} toColor The starting color in hex or rgb(a) format.\n * @param {Number} [duration] Duration of change (in ms).\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n * @returns {Function} abort function\n */\n function animateColor(fromColor, toColor, duration, options) {\n var startColor = new fabric.Color(fromColor).getSource(),\n endColor = new fabric.Color(toColor).getSource(),\n originalOnComplete = options.onComplete,\n originalOnChange = options.onChange;\n options = options || {};\n\n return fabric.util.animate(fabric.util.object.extend(options, {\n duration: duration || 500,\n startValue: startColor,\n endValue: endColor,\n byValue: endColor,\n easing: function (currentTime, startValue, byValue, duration) {\n var posValue = options.colorEasing\n ? options.colorEasing(currentTime, duration)\n : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n return calculateColor(startValue, byValue, posValue);\n },\n // has to take in account for color restoring;\n onComplete: function(current, valuePerc, timePerc) {\n if (originalOnComplete) {\n return originalOnComplete(\n calculateColor(endColor, endColor, 0),\n valuePerc,\n timePerc\n );\n }\n },\n onChange: function(current, valuePerc, timePerc) {\n if (originalOnChange) {\n if (Array.isArray(current)) {\n return originalOnChange(\n calculateColor(current, current, 0),\n valuePerc,\n timePerc\n );\n }\n originalOnChange(current, valuePerc, timePerc);\n }\n }\n }));\n }\n\n fabric.util.animateColor = animateColor;\n\n})();\n\n\n(function() {\n\n function normalize(a, c, p, s) {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = p / (2 * Math.PI) * Math.asin(1);\n }\n else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n }\n return { a: a, c: c, p: p, s: s };\n }\n\n function elastic(opts, t, d) {\n return opts.a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin( (t * d - opts.s) * (2 * Math.PI) / opts.p );\n }\n\n /**\n * Cubic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n }\n\n /**\n * Cubic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCubic(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n\n /**\n * Quartic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n }\n\n /**\n * Quartic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n }\n\n /**\n * Quartic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuart(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t + b;\n }\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n\n /**\n * Quintic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n }\n\n /**\n * Quintic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n }\n\n /**\n * Quintic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuint(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n\n /**\n * Sinusoidal easing in\n * @memberOf fabric.util.ease\n */\n function easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Sinusoidal easing out\n * @memberOf fabric.util.ease\n */\n function easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n }\n\n /**\n * Sinusoidal easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n }\n\n /**\n * Exponential easing in\n * @memberOf fabric.util.ease\n */\n function easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n\n /**\n * Exponential easing out\n * @memberOf fabric.util.ease\n */\n function easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n\n /**\n * Exponential easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutExpo(t, b, c, d) {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n }\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n\n /**\n * Circular easing in\n * @memberOf fabric.util.ease\n */\n function easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n }\n\n /**\n * Circular easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n }\n\n /**\n * Circular easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCirc(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n }\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n\n /**\n * Elastic easing in\n * @memberOf fabric.util.ease\n */\n function easeInElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return -elastic(opts, t, d) + b;\n }\n\n /**\n * Elastic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b;\n }\n\n /**\n * Elastic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n var opts = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(opts, t, d) + b;\n }\n return opts.a * Math.pow(2, -10 * (t -= 1)) *\n Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b;\n }\n\n /**\n * Backwards easing in\n * @memberOf fabric.util.ease\n */\n function easeInBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n }\n\n /**\n * Backwards easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n\n /**\n * Backwards easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n }\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n }\n\n /**\n * Bouncing easing in\n * @memberOf fabric.util.ease\n */\n function easeInBounce(t, b, c, d) {\n return c - easeOutBounce (d - t, 0, c, d) + b;\n }\n\n /**\n * Bouncing easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n }\n else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n }\n else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n else {\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n }\n }\n\n /**\n * Bouncing easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBounce(t, b, c, d) {\n if (t < d / 2) {\n return easeInBounce (t * 2, 0, c, d) * 0.5 + b;\n }\n return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n\n /**\n * Easing functions\n * See Easing Equations by Robert Penner\n * @namespace fabric.util.ease\n */\n fabric.util.ease = {\n\n /**\n * Quadratic easing in\n * @memberOf fabric.util.ease\n */\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n /**\n * Quadratic easing out\n * @memberOf fabric.util.ease\n */\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n /**\n * Quadratic easing in and out\n * @memberOf fabric.util.ease\n */\n easeInOutQuad: function(t, b, c, d) {\n t /= (d / 2);\n if (t < 1) {\n return c / 2 * t * t + b;\n }\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n /**\n * Cubic easing in\n * @memberOf fabric.util.ease\n */\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n easeInSine: easeInSine,\n easeOutSine: easeOutSine,\n easeInOutSine: easeInOutSine,\n easeInExpo: easeInExpo,\n easeOutExpo: easeOutExpo,\n easeInOutExpo: easeInOutExpo,\n easeInCirc: easeInCirc,\n easeOutCirc: easeOutCirc,\n easeInOutCirc: easeInOutCirc,\n easeInElastic: easeInElastic,\n easeOutElastic: easeOutElastic,\n easeInOutElastic: easeInOutElastic,\n easeInBack: easeInBack,\n easeOutBack: easeOutBack,\n easeInOutBack: easeInOutBack,\n easeInBounce: easeInBounce,\n easeOutBounce: easeOutBounce,\n easeInOutBounce: easeInOutBounce\n };\n\n})();\n\n\n(function(global) {\n\n 'use strict';\n\n /**\n * @name fabric\n * @namespace\n */\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n parseUnit = fabric.util.parseUnit,\n multiplyTransformMatrices = fabric.util.multiplyTransformMatrices,\n\n svgValidTagNames = ['path', 'circle', 'polygon', 'polyline', 'ellipse', 'rect', 'line',\n 'image', 'text'],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = ['pattern', 'defs', 'symbol', 'metadata', 'clipPath', 'mask', 'desc'],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n\n attributesMap = {\n cx: 'left',\n x: 'left',\n r: 'radius',\n cy: 'top',\n y: 'top',\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n\n colorAttributes = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity'\n },\n\n fSize = 'font-size', cPath = 'clip-path';\n\n fabric.svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n fabric.svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n fabric.svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n fabric.svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n fabric.cssRules = { };\n fabric.gradientDefs = { };\n fabric.clipPaths = { };\n\n function normalizeAttr(attr) {\n // transform attribute names\n if (attr in attributesMap) {\n return attributesMap[attr];\n }\n return attr;\n }\n\n function normalizeValue(attr, value, parentAttributes, fontSize) {\n var isArray = Array.isArray(value), parsed;\n\n if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n value = '';\n }\n else if (attr === 'strokeUniform') {\n return (value === 'non-scaling-stroke');\n }\n else if (attr === 'strokeDashArray') {\n if (value === 'none') {\n value = null;\n }\n else {\n value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n }\n else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n value = multiplyTransformMatrices(\n parentAttributes.transformMatrix, fabric.parseTransformAttribute(value));\n }\n else {\n value = fabric.parseTransformAttribute(value);\n }\n }\n else if (attr === 'visible') {\n value = value !== 'none' && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n value = false;\n }\n }\n else if (attr === 'opacity') {\n value = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n value *= parentAttributes.opacity;\n }\n }\n else if (attr === 'textAnchor' /* text-anchor */) {\n value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';\n }\n else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = parseUnit(value, fontSize) / fontSize * 1000;\n }\n else if (attr === 'paintFirst') {\n var fillIndex = value.indexOf('fill');\n var strokeIndex = value.indexOf('stroke');\n var value = 'fill';\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n value = 'stroke';\n }\n else if (fillIndex === -1 && strokeIndex > -1) {\n value = 'stroke';\n }\n }\n else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n return value;\n }\n else if (attr === 'imageSmoothing') {\n return (value === 'optimizeQuality');\n }\n else {\n parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);\n }\n\n return (!isArray && isNaN(parsed) ? value : parsed);\n }\n\n /**\n * @private\n */\n function getSvgRegex(arr) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n }\n\n /**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n function _setStrokeFillOpacity(attributes) {\n for (var attr in colorAttributes) {\n\n if (typeof attributes[colorAttributes[attr]] === 'undefined' || attributes[attr] === '') {\n continue;\n }\n\n if (typeof attributes[attr] === 'undefined') {\n if (!fabric.Object.prototype[attr]) {\n continue;\n }\n attributes[attr] = fabric.Object.prototype[attr];\n }\n\n if (attributes[attr].indexOf('url(') === 0) {\n continue;\n }\n\n var color = new fabric.Color(attributes[attr]);\n attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba();\n }\n return attributes;\n }\n\n /**\n * @private\n */\n function _getMultipleNodes(doc, nodeNames) {\n var nodeName, nodeArray = [], nodeList, i, len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagName(nodeName);\n nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n }\n return nodeArray;\n }\n\n /**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {Array} Array of 6 elements representing transformation matrix\n */\n fabric.parseTransformAttribute = (function() {\n function rotateMatrix(matrix, args) {\n var cos = fabric.util.cos(args[0]), sin = fabric.util.sin(args[0]),\n x = 0, y = 0;\n if (args.length === 3) {\n x = args[1];\n y = args[2];\n }\n\n matrix[0] = cos;\n matrix[1] = sin;\n matrix[2] = -sin;\n matrix[3] = cos;\n matrix[4] = x - (cos * x - sin * y);\n matrix[5] = y - (sin * x + cos * y);\n }\n\n function scaleMatrix(matrix, args) {\n var multiplierX = args[0],\n multiplierY = (args.length === 2) ? args[1] : args[0];\n\n matrix[0] = multiplierX;\n matrix[3] = multiplierY;\n }\n\n function skewMatrix(matrix, args, pos) {\n matrix[pos] = Math.tan(fabric.util.degreesToRadians(args[0]));\n }\n\n function translateMatrix(matrix, args) {\n matrix[4] = args[0];\n if (args.length === 2) {\n matrix[5] = args[1];\n }\n }\n\n // identity matrix\n var iMatrix = fabric.iMatrix,\n\n // == begin transform regexp\n number = fabric.reNum,\n\n commaWsp = fabric.commaWsp,\n\n skewX = '(?:(skewX)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n skewY = '(?:(skewY)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n rotate = '(?:(rotate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + ')' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n scale = '(?:(scale)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n translate = '(?:(translate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n matrix = '(?:(matrix)\\\\s*\\\\(\\\\s*' +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' +\n '\\\\s*\\\\))',\n\n transform = '(?:' +\n matrix + '|' +\n translate + '|' +\n scale + '|' +\n rotate + '|' +\n skewX + '|' +\n skewY +\n ')',\n\n transforms = '(?:' + transform + '(?:' + commaWsp + '*' + transform + ')*' + ')',\n\n transformList = '^\\\\s*(?:' + transforms + '?)\\\\s*$',\n\n // http://www.w3.org/TR/SVG/coords.html#TransformAttribute\n reTransformList = new RegExp(transformList),\n // == end transform regexp\n\n reTransform = new RegExp(transform, 'g');\n\n return function(attributeValue) {\n\n // start with identity matrix\n var matrix = iMatrix.concat(),\n matrices = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (!attributeValue || (attributeValue && !reTransformList.test(attributeValue))) {\n return matrix;\n }\n\n attributeValue.replace(reTransform, function(match) {\n\n var m = new RegExp(transform).exec(match).filter(function (match) {\n // match !== '' && match != null\n return (!!match);\n }),\n operation = m[1],\n args = m.slice(2).map(parseFloat);\n\n switch (operation) {\n case 'translate':\n translateMatrix(matrix, args);\n break;\n case 'rotate':\n args[0] = fabric.util.degreesToRadians(args[0]);\n rotateMatrix(matrix, args);\n break;\n case 'scale':\n scaleMatrix(matrix, args);\n break;\n case 'skewX':\n skewMatrix(matrix, args, 2);\n break;\n case 'skewY':\n skewMatrix(matrix, args, 1);\n break;\n case 'matrix':\n matrix = args;\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix.concat());\n // reset\n matrix = iMatrix.concat();\n });\n\n var combinedMatrix = matrices[0];\n while (matrices.length > 1) {\n matrices.shift();\n combinedMatrix = fabric.util.multiplyTransformMatrices(combinedMatrix, matrices[0]);\n }\n return combinedMatrix;\n };\n })();\n\n /**\n * @private\n */\n function parseStyleString(style, oStyle) {\n var attr, value;\n style.replace(/;\\s*$/, '').split(';').forEach(function (chunk) {\n var pair = chunk.split(':');\n\n attr = pair[0].trim().toLowerCase();\n value = pair[1].trim();\n\n oStyle[attr] = value;\n });\n }\n\n /**\n * @private\n */\n function parseStyleObject(style, oStyle) {\n var attr, value;\n for (var prop in style) {\n if (typeof style[prop] === 'undefined') {\n continue;\n }\n\n attr = prop.toLowerCase();\n value = style[prop];\n\n oStyle[attr] = value;\n }\n }\n\n /**\n * @private\n */\n function getGlobalStylesForElement(element, svgUid) {\n var styles = { };\n for (var rule in fabric.cssRules[svgUid]) {\n if (elementMatchesRule(element, rule.split(' '))) {\n for (var property in fabric.cssRules[svgUid][rule]) {\n styles[property] = fabric.cssRules[svgUid][rule][property];\n }\n }\n }\n return styles;\n }\n\n /**\n * @private\n */\n function elementMatchesRule(element, selectors) {\n var firstMatching, parentMatching = true;\n //start from rightmost selector.\n firstMatching = selectorMatches(element, selectors.pop());\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && (selectors.length === 0);\n }\n\n function doesSomeParentMatch(element, selectors) {\n var selector, parentMatching = true;\n while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) {\n if (parentMatching) {\n selector = selectors.pop();\n }\n element = element.parentNode;\n parentMatching = selectorMatches(element, selector);\n }\n return selectors.length === 0;\n }\n\n /**\n * @private\n */\n function selectorMatches(element, selector) {\n var nodeName = element.nodeName,\n classNames = element.getAttribute('class'),\n id = element.getAttribute('id'), matcher, i;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n classNames = classNames.split(' ');\n for (i = classNames.length; i--;) {\n matcher = new RegExp('\\\\.' + classNames[i] + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n }\n\n /**\n * @private\n * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n */\n function elementById(doc, id) {\n var el;\n doc.getElementById && (el = doc.getElementById(id));\n if (el) {\n return el;\n }\n var node, i, len, nodelist = doc.getElementsByTagName('*');\n for (i = 0, len = nodelist.length; i < len; i++) {\n node = nodelist[i];\n if (id === node.getAttribute('id')) {\n return node;\n }\n }\n }\n\n /**\n * @private\n */\n function parseUseDirectives(doc) {\n var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0;\n while (nodelist.length && i < nodelist.length) {\n var el = nodelist[i],\n xlinkAttribute = el.getAttribute('xlink:href') || el.getAttribute('href');\n\n if (xlinkAttribute === null) {\n return;\n }\n\n var xlink = xlinkAttribute.slice(1),\n x = el.getAttribute('x') || 0,\n y = el.getAttribute('y') || 0,\n el2 = elementById(doc, xlink).cloneNode(true),\n currentTrans = (el2.getAttribute('transform') || '') + ' translate(' + x + ', ' + y + ')',\n parentNode,\n oldLength = nodelist.length, attr,\n j,\n attrs,\n len,\n namespace = fabric.svgNS;\n\n applyViewboxTransform(el2);\n if (/^svg$/i.test(el2.nodeName)) {\n var el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n for (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue);\n }\n // el2.firstChild != null\n while (el2.firstChild) {\n el3.appendChild(el2.firstChild);\n }\n el2 = el3;\n }\n\n for (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n if (attr.nodeName === 'x' || attr.nodeName === 'y' ||\n attr.nodeName === 'xlink:href' || attr.nodeName === 'href') {\n continue;\n }\n\n if (attr.nodeName === 'transform') {\n currentTrans = attr.nodeValue + ' ' + currentTrans;\n }\n else {\n el2.setAttribute(attr.nodeName, attr.nodeValue);\n }\n }\n\n el2.setAttribute('transform', currentTrans);\n el2.setAttribute('instantiated_by_use', '1');\n el2.removeAttribute('id');\n parentNode = el.parentNode;\n parentNode.replaceChild(el2, el);\n // some browsers do not shorten nodelist after replaceChild (IE8)\n if (nodelist.length === oldLength) {\n i++;\n }\n }\n }\n\n // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n // matches, e.g.: +14.56e-12, etc.\n var reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*' +\n '$'\n );\n\n /**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\n function applyViewboxTransform(element) {\n if (!fabric.svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n var viewBoxAttr = element.getAttribute('viewBox'),\n scaleX = 1,\n scaleY = 1,\n minX = 0,\n minY = 0,\n viewBoxWidth, viewBoxHeight, matrix, el,\n widthAttr = element.getAttribute('width'),\n heightAttr = element.getAttribute('height'),\n x = element.getAttribute('x') || 0,\n y = element.getAttribute('y') || 0,\n preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '',\n missingViewBox = (!viewBoxAttr || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))),\n missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'),\n toBeParsed = missingViewBox && missingDimAttr,\n parsedDim = { }, translateMatrix = '', widthDiff = 0, heightDiff = 0;\n\n parsedDim.width = 0;\n parsedDim.height = 0;\n parsedDim.toBeParsed = toBeParsed;\n\n if (missingViewBox) {\n if (((x || y) && element.parentNode && element.parentNode.nodeName !== '#document')) {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (toBeParsed) {\n return parsedDim;\n }\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n minX = -parseFloat(viewBoxAttr[1]);\n minY = -parseFloat(viewBoxAttr[2]);\n viewBoxWidth = parseFloat(viewBoxAttr[3]);\n viewBoxHeight = parseFloat(viewBoxAttr[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n }\n else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n preserveAspectRatio = fabric.util.parsePreserveAspectRatioAttribute(preserveAspectRatio);\n if (preserveAspectRatio.alignX !== 'none') {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = (scaleX > scaleY ? scaleY : scaleX);\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = (scaleX > scaleY ? scaleX : scaleY);\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (scaleX === 1 && scaleY === 1 && minX === 0 && minY === 0 && x === 0 && y === 0) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode.nodeName !== '#document') {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n }\n\n matrix = translateMatrix + ' matrix(' + scaleX +\n ' 0' +\n ' 0 ' +\n scaleY + ' ' +\n (minX * scaleX + widthDiff) + ' ' +\n (minY * scaleY + heightDiff) + ') ';\n // seems unused.\n // parsedDim.viewboxTransform = fabric.parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(fabric.svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n }\n else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n }\n\n function hasAncestorWithNodeName(element, nodeName) {\n while (element && (element = element.parentNode)) {\n if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', ''))\n && !element.getAttribute('instantiated_by_use')) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @param {Function} callback Callback to call when parsing is finished;\n * It's being passed an array of elements (parsed from a document).\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [parsingOptions] options for parsing document\n * @param {String} [parsingOptions.crossOrigin] crossOrigin settings\n */\n fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) {\n if (!doc) {\n return;\n }\n\n parseUseDirectives(doc);\n\n var svgUid = fabric.Object.__uid++, i, len,\n options = applyViewboxTransform(doc),\n descendants = fabric.util.toArray(doc.getElementsByTagName('*'));\n options.crossOrigin = parsingOptions && parsingOptions.crossOrigin;\n options.svgUid = svgUid;\n\n if (descendants.length === 0 && fabric.isLikelyNode) {\n // we're likely in node, where \"o3-xml\" library fails to gEBTN(\"*\")\n // https://github.com/ajaxorg/node-o3-xml/issues/21\n descendants = doc.selectNodes('//*[name(.)!=\"svg\"]');\n var arr = [];\n for (i = 0, len = descendants.length; i < len; i++) {\n arr[i] = descendants[i];\n }\n descendants = arr;\n }\n\n var elements = descendants.filter(function(el) {\n applyViewboxTransform(el);\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&\n !hasAncestorWithNodeName(el, fabric.svgInvalidAncestorsRegEx); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n callback && callback([], {});\n return;\n }\n var clipPaths = { };\n descendants.filter(function(el) {\n return el.nodeName.replace('svg:', '') === 'clipPath';\n }).forEach(function(el) {\n var id = el.getAttribute('id');\n clipPaths[id] = fabric.util.toArray(el.getElementsByTagName('*')).filter(function(el) {\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''));\n });\n });\n fabric.gradientDefs[svgUid] = fabric.getGradientDefs(doc);\n fabric.cssRules[svgUid] = fabric.getCSSRules(doc);\n fabric.clipPaths[svgUid] = clipPaths;\n // Precedence of rules: style > class > attribute\n fabric.parseElements(elements, function(instances, elements) {\n if (callback) {\n callback(instances, options, elements, descendants);\n delete fabric.gradientDefs[svgUid];\n delete fabric.cssRules[svgUid];\n delete fabric.clipPaths[svgUid];\n }\n }, clone(options), reviver, parsingOptions);\n };\n\n function recursivelyParseGradientsXlink(doc, gradient) {\n var gradientsAttrs = ['gradientTransform', 'x1', 'x2', 'y1', 'y2', 'gradientUnits', 'cx', 'cy', 'r', 'fx', 'fy'],\n xlinkAttr = 'xlink:href',\n xLink = gradient.getAttribute(xlinkAttr).slice(1),\n referencedGradient = elementById(doc, xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient);\n }\n gradientsAttrs.forEach(function(attr) {\n if (referencedGradient && !gradient.hasAttribute(attr) && referencedGradient.hasAttribute(attr)) {\n gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\n }\n });\n if (!gradient.children.length) {\n var referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n gradient.removeAttribute(xlinkAttr);\n }\n\n var reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n fabric.reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' + fabric.reNum + '))?\\\\s+(.*)');\n\n extend(fabric, {\n /**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\n parseFontDeclaration: function(value, oStyle) {\n var match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n var fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n },\n\n /**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\n getGradientDefs: function(doc) {\n var tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient'],\n elList = _getMultipleNodes(doc, tagArray),\n el, j = 0, gradientDefs = { };\n j = elList.length;\n while (j--) {\n el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n gradientDefs[el.getAttribute('id')] = el;\n }\n return gradientDefs;\n },\n\n /**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @static\n * @memberOf fabric\n * @param {DOMElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\n parseAttributes: function(element, attributes, svgUid) {\n\n if (!element) {\n return;\n }\n\n var value,\n parentAttributes = { },\n fontSize, parentFontSize;\n\n if (typeof svgUid === 'undefined') {\n svgUid = element.getAttribute('svgUid');\n }\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (element.parentNode && fabric.svgValidParentsRegEx.test(element.parentNode.nodeName)) {\n parentAttributes = fabric.parseAttributes(element.parentNode, attributes, svgUid);\n }\n\n var ownAttributes = attributes.reduce(function(memo, attr) {\n value = element.getAttribute(attr);\n if (value) { // eslint-disable-line\n memo[attr] = value;\n }\n return memo;\n }, { });\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n var cssAttrs = extend(\n getGlobalStylesForElement(element, svgUid),\n fabric.parseStyleAttribute(element)\n );\n ownAttributes = extend(\n ownAttributes,\n cssAttrs\n );\n if (cssAttrs[cPath]) {\n element.setAttribute(cPath, cssAttrs[cPath]);\n }\n fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE;\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n ownAttributes[fSize] = fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n }\n\n var normalizedAttr, normalizedValue, normalizedStyle = {};\n for (var attr in ownAttributes) {\n normalizedAttr = normalizeAttr(attr);\n normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize);\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle);\n }\n var mergedAttrs = extend(parentAttributes, normalizedStyle);\n return fabric.svgValidParentsRegEx.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs);\n },\n\n /**\n * Transforms an array of svg elements to corresponding fabric.* instances\n * @static\n * @memberOf fabric\n * @param {Array} elements Array of elements to parse\n * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n * @param {Object} [options] Options object\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n */\n parseElements: function(elements, callback, options, reviver, parsingOptions) {\n new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();\n },\n\n /**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\n parseStyleAttribute: function(element) {\n var oStyle = { },\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n }\n else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n },\n\n /**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\n parsePointsAttribute: function(points) {\n\n // points attribute is required and must not be empty\n if (!points) {\n return null;\n }\n\n // replace commas with whitespace and remove bookending whitespace\n points = points.replace(/,/g, ' ').trim();\n\n points = points.split(/\\s+/);\n var parsedPoints = [], i, len;\n\n for (i = 0, len = points.length; i < len; i += 2) {\n parsedPoints.push({\n x: parseFloat(points[i]),\n y: parseFloat(points[i + 1])\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n\n return parsedPoints;\n },\n\n /**\n * Returns CSS rules for a given SVG document\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\n getCSSRules: function(doc) {\n var styles = doc.getElementsByTagName('style'), i, len,\n allRules = { }, rules;\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n var styleContents = styles[i].textContent;\n\n // remove comments\n styleContents = styleContents.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n if (styleContents.trim() === '') {\n continue;\n }\n // recovers all the rule in this form `body { style code... }`\n // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n rules = styleContents.split('}');\n // remove empty rules.\n rules = rules.filter(function(rule) { return rule.trim(); });\n // at this point we have hopefully an array of rules `body { style code... `\n // eslint-disable-next-line no-loop-func\n rules.forEach(function(rule) {\n\n var match = rule.split('{'),\n ruleObj = { }, declaration = match[1].trim(),\n propertyValuePairs = declaration.split(';').filter(function(pair) { return pair.trim(); });\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n var pair = propertyValuePairs[i].split(':'),\n property = pair[0].trim(),\n value = pair[1].trim();\n ruleObj[property] = value;\n }\n rule = match[0].trim();\n rule.split(',').forEach(function(_rule) {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n if (allRules[_rule]) {\n fabric.util.object.extend(allRules[_rule], ruleObj);\n }\n else {\n allRules[_rule] = fabric.util.object.clone(ruleObj);\n }\n });\n });\n }\n return allRules;\n },\n\n /**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {String} url\n * @param {Function} callback\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n */\n loadSVGFromURL: function(url, callback, reviver, options) {\n\n url = url.replace(/^\\n\\s*/, '').trim();\n new fabric.util.request(url, {\n method: 'get',\n onComplete: onComplete\n });\n\n function onComplete(r) {\n\n var xml = r.responseXML;\n if (!xml || !xml.documentElement) {\n callback && callback(null);\n return false;\n }\n\n fabric.parseSVGDocument(xml.documentElement, function (results, _options, elements, allElements) {\n callback && callback(results, _options, elements, allElements);\n }, reviver, options);\n }\n },\n\n /**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string\n * @param {Function} callback\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n */\n loadSVGFromString: function(string, callback, reviver, options) {\n var parser = new fabric.window.DOMParser(),\n doc = parser.parseFromString(string.trim(), 'text/xml');\n fabric.parseSVGDocument(doc.documentElement, function (results, _options, elements, allElements) {\n callback(results, _options, elements, allElements);\n }, reviver, options);\n }\n });\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions, doc) {\n this.elements = elements;\n this.callback = callback;\n this.options = options;\n this.reviver = reviver;\n this.svgUid = (options && options.svgUid) || 0;\n this.parsingOptions = parsingOptions;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n};\n\n(function(proto) {\n proto.parse = function() {\n this.instances = new Array(this.elements.length);\n this.numElements = this.elements.length;\n this.createObjects();\n };\n\n proto.createObjects = function() {\n var _this = this;\n this.elements.forEach(function(element, i) {\n element.setAttribute('svgUid', _this.svgUid);\n _this.createObject(element, i);\n });\n };\n\n proto.findTag = function(el) {\n return fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))];\n };\n\n proto.createObject = function(el, index) {\n var klass = this.findTag(el);\n if (klass && klass.fromElement) {\n try {\n klass.fromElement(el, this.createCallback(index, el), this.options);\n }\n catch (err) {\n fabric.log(err);\n }\n }\n else {\n this.checkIfDone();\n }\n };\n\n proto.createCallback = function(index, el) {\n var _this = this;\n return function(obj) {\n var _options;\n _this.resolveGradient(obj, el, 'fill');\n _this.resolveGradient(obj, el, 'stroke');\n if (obj instanceof fabric.Image && obj._originalElement) {\n _options = obj.parsePreserveAspectRatioAttribute(el);\n }\n obj._removeTransformMatrix(_options);\n _this.resolveClipPath(obj, el);\n _this.reviver && _this.reviver(el, obj);\n _this.instances[index] = obj;\n _this.checkIfDone();\n };\n };\n\n proto.extractPropertyDefinition = function(obj, property, storage) {\n var value = obj[property], regex = this.regexUrl;\n if (!regex.test(value)) {\n return;\n }\n regex.lastIndex = 0;\n var id = regex.exec(value)[1];\n regex.lastIndex = 0;\n return fabric[storage][this.svgUid][id];\n };\n\n proto.resolveGradient = function(obj, el, property) {\n var gradientDef = this.extractPropertyDefinition(obj, property, 'gradientDefs');\n if (gradientDef) {\n var opacityAttr = el.getAttribute(property + '-opacity');\n var gradient = fabric.Gradient.fromElement(gradientDef, obj, opacityAttr, this.options);\n obj.set(property, gradient);\n }\n };\n\n proto.createClipPathCallback = function(obj, container) {\n return function(_newObj) {\n _newObj._removeTransformMatrix();\n _newObj.fillRule = _newObj.clipRule;\n container.push(_newObj);\n };\n };\n\n proto.resolveClipPath = function(obj, usingElement) {\n var clipPath = this.extractPropertyDefinition(obj, 'clipPath', 'clipPaths'),\n element, klass, objTransformInv, container, gTransform, options;\n if (clipPath) {\n container = [];\n objTransformInv = fabric.util.invertTransform(obj.calcTransformMatrix());\n // move the clipPath tag as sibling to the real element that is using it\n var clipPathTag = clipPath[0].parentNode;\n var clipPathOwner = usingElement;\n while (clipPathOwner.parentNode && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) {\n clipPathOwner = clipPathOwner.parentNode;\n }\n clipPathOwner.parentNode.appendChild(clipPathTag);\n for (var i = 0; i < clipPath.length; i++) {\n element = clipPath[i];\n klass = this.findTag(element);\n klass.fromElement(\n element,\n this.createClipPathCallback(obj, container),\n this.options\n );\n }\n if (container.length === 1) {\n clipPath = container[0];\n }\n else {\n clipPath = new fabric.Group(container);\n }\n gTransform = fabric.util.multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix()\n );\n if (clipPath.clipPath) {\n this.resolveClipPath(clipPath, clipPathOwner);\n }\n var options = fabric.util.qrDecompose(gTransform);\n clipPath.flipX = false;\n clipPath.flipY = false;\n clipPath.set('scaleX', options.scaleX);\n clipPath.set('scaleY', options.scaleY);\n clipPath.angle = options.angle;\n clipPath.skewX = options.skewX;\n clipPath.skewY = 0;\n clipPath.setPositionByOrigin({ x: options.translateX, y: options.translateY }, 'center', 'center');\n obj.clipPath = clipPath;\n }\n else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n }\n };\n\n proto.checkIfDone = function() {\n if (--this.numElements === 0) {\n this.instances = this.instances.filter(function(el) {\n // eslint-disable-next-line no-eq-null, eqeqeq\n return el != null;\n });\n this.callback(this.instances, this.elements);\n }\n };\n})(fabric.ElementsParser.prototype);\n\n\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Point) {\n fabric.warn('fabric.Point is already defined');\n return;\n }\n\n fabric.Point = Point;\n\n /**\n * Point class\n * @class fabric.Point\n * @memberOf fabric\n * @constructor\n * @param {Number} x\n * @param {Number} y\n * @return {fabric.Point} thisArg\n */\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n\n Point.prototype = /** @lends fabric.Point.prototype */ {\n\n type: 'point',\n\n constructor: Point,\n\n /**\n * Adds another point to this one and returns another one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point instance with added values\n */\n add: function (that) {\n return new Point(this.x + that.x, this.y + that.y);\n },\n\n /**\n * Adds another point to this one\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n addEquals: function (that) {\n this.x += that.x;\n this.y += that.y;\n return this;\n },\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point} new Point with added value\n */\n scalarAdd: function (scalar) {\n return new Point(this.x + scalar, this.y + scalar);\n },\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarAddEquals: function (scalar) {\n this.x += scalar;\n this.y += scalar;\n return this;\n },\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point object with subtracted values\n */\n subtract: function (that) {\n return new Point(this.x - that.x, this.y - that.y);\n },\n\n /**\n * Subtracts another point from this point\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n subtractEquals: function (that) {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n },\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n scalarSubtract: function (scalar) {\n return new Point(this.x - scalar, this.y - scalar);\n },\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarSubtractEquals: function (scalar) {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n },\n\n /**\n * Multiplies this point by a value and returns a new one\n * TODO: rename in scalarMultiply in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n multiply: function (scalar) {\n return new Point(this.x * scalar, this.y * scalar);\n },\n\n /**\n * Multiplies this point by a value\n * TODO: rename in scalarMultiplyEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n multiplyEquals: function (scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n },\n\n /**\n * Divides this point by a value and returns a new one\n * TODO: rename in scalarDivide in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n divide: function (scalar) {\n return new Point(this.x / scalar, this.y / scalar);\n },\n\n /**\n * Divides this point by a value\n * TODO: rename in scalarDivideEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n divideEquals: function (scalar) {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n },\n\n /**\n * Returns true if this point is equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n eq: function (that) {\n return (this.x === that.x && this.y === that.y);\n },\n\n /**\n * Returns true if this point is less than another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lt: function (that) {\n return (this.x < that.x && this.y < that.y);\n },\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lte: function (that) {\n return (this.x <= that.x && this.y <= that.y);\n },\n\n /**\n\n * Returns true if this point is greater another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gt: function (that) {\n return (this.x > that.x && this.y > that.y);\n },\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gte: function (that) {\n return (this.x >= that.x && this.y >= that.y);\n },\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {fabric.Point} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {fabric.Point}\n */\n lerp: function (that, t) {\n if (typeof t === 'undefined') {\n t = 0.5;\n }\n t = Math.max(Math.min(1, t), 0);\n return new Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t);\n },\n\n /**\n * Returns distance from this point and another one\n * @param {fabric.Point} that\n * @return {Number}\n */\n distanceFrom: function (that) {\n var dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n\n /**\n * Returns the point between this point and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n midPointFrom: function (that) {\n return this.lerp(that);\n },\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n min: function (that) {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n },\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n max: function (that) {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n },\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString: function () {\n return this.x + ',' + this.y;\n },\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY: function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX: function (x) {\n this.x = x;\n return this;\n },\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY: function (y) {\n this.y = y;\n return this;\n },\n\n /**\n * Sets x/y of this point from another point\n * @param {fabric.Point} that\n * @chainable\n */\n setFromPoint: function (that) {\n this.x = that.x;\n this.y = that.y;\n return this;\n },\n\n /**\n * Swaps x/y of this point and another point\n * @param {fabric.Point} that\n */\n swap: function (that) {\n var x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n },\n\n /**\n * return a cloned instance of the point\n * @return {fabric.Point}\n */\n clone: function () {\n return new Point(this.x, this.y);\n }\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Intersection) {\n fabric.warn('fabric.Intersection is already defined');\n return;\n }\n\n /**\n * Intersection class\n * @class fabric.Intersection\n * @memberOf fabric\n * @constructor\n */\n function Intersection(status) {\n this.status = status;\n this.points = [];\n }\n\n fabric.Intersection = Intersection;\n\n fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ {\n\n constructor: Intersection,\n\n /**\n * Appends a point to intersection\n * @param {fabric.Point} point\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoint: function (point) {\n this.points.push(point);\n return this;\n },\n\n /**\n * Appends points to intersection\n * @param {Array} points\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoints: function (points) {\n this.points = this.points.concat(points);\n return this;\n }\n };\n\n /**\n * Checks if one line intersects another\n * TODO: rename in intersectSegmentSegment\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {fabric.Point} b1\n * @param {fabric.Point} b2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) {\n var result,\n uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\n ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x),\n uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n if (uB !== 0) {\n var ua = uaT / uB,\n ub = ubT / uB;\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection('Intersection');\n result.appendPoint(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y)));\n }\n else {\n result = new Intersection();\n }\n }\n else {\n if (uaT === 0 || ubT === 0) {\n result = new Intersection('Coincident');\n }\n else {\n result = new Intersection('Parallel');\n }\n }\n return result;\n };\n\n /**\n * Checks if line intersects polygon\n * TODO: rename in intersectSegmentPolygon\n * fix detection of coincident\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {Array} points\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLinePolygon = function(a1, a2, points) {\n var result = new Intersection(),\n length = points.length,\n b1, b2, inter, i;\n\n for (i = 0; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects another polygon\n * @static\n * @param {Array} points1\n * @param {Array} points2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonPolygon = function (points1, points2) {\n var result = new Intersection(),\n length = points1.length, i;\n\n for (i = 0; i < length; i++) {\n var a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectLinePolygon(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @param {Array} points\n * @param {fabric.Point} r1\n * @param {fabric.Point} r2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) {\n var min = r1.min(r2),\n max = r1.max(r2),\n topRight = new fabric.Point(max.x, min.y),\n bottomLeft = new fabric.Point(min.x, max.y),\n inter1 = Intersection.intersectLinePolygon(min, topRight, points),\n inter2 = Intersection.intersectLinePolygon(topRight, max, points),\n inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points),\n inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points),\n result = new Intersection();\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Color) {\n fabric.warn('fabric.Color is already defined.');\n return;\n }\n\n /**\n * Color class\n * The purpose of {@link fabric.Color} is to abstract and encapsulate common color operations;\n * {@link fabric.Color} is a constructor and creates instances of {@link fabric.Color} objects.\n *\n * @class fabric.Color\n * @param {String} color optional in hex or rgb(a) or hsl format or from known color list\n * @return {fabric.Color} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors}\n */\n function Color(color) {\n if (!color) {\n this.setSource([0, 0, 0, 1]);\n }\n else {\n this._tryParsingColor(color);\n }\n }\n\n fabric.Color = Color;\n\n fabric.Color.prototype = /** @lends fabric.Color.prototype */ {\n\n /**\n * @private\n * @param {String|Array} color Color value to parse\n */\n _tryParsingColor: function(color) {\n var source;\n\n if (color in Color.colorNameMap) {\n color = Color.colorNameMap[color];\n }\n\n if (color === 'transparent') {\n source = [255, 255, 255, 0];\n }\n\n if (!source) {\n source = Color.sourceFromHex(color);\n }\n if (!source) {\n source = Color.sourceFromRgb(color);\n }\n if (!source) {\n source = Color.sourceFromHsl(color);\n }\n if (!source) {\n //if color is not recognize let's make black as canvas does\n source = [0, 0, 0, 1];\n }\n if (source) {\n this.setSource(source);\n }\n },\n\n /**\n * Adapted from https://github.com/mjijackson\n * @private\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @return {Array} Hsl color\n */\n _rgbToHsl: function(r, g, b) {\n r /= 255; g /= 255; b /= 255;\n\n var h, s, l,\n max = fabric.util.array.max([r, g, b]),\n min = fabric.util.array.min([r, g, b]);\n\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [\n Math.round(h * 360),\n Math.round(s * 100),\n Math.round(l * 100)\n ];\n },\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {Array}\n */\n getSource: function() {\n return this._source;\n },\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {Array} source\n */\n setSource: function(source) {\n this._source = source;\n },\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb: function() {\n var source = this.getSource();\n return 'rgb(' + source[0] + ',' + source[1] + ',' + source[2] + ')';\n },\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba: function() {\n var source = this.getSource();\n return 'rgba(' + source[0] + ',' + source[1] + ',' + source[2] + ',' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsl(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%)';\n },\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsla(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%,' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex: function() {\n var source = this.getSource(), r, g, b;\n\n r = source[0].toString(16);\n r = (r.length === 1) ? ('0' + r) : r;\n\n g = source[1].toString(16);\n g = (g.length === 1) ? ('0' + g) : g;\n\n b = source[2].toString(16);\n b = (b.length === 1) ? ('0' + b) : b;\n\n return r.toUpperCase() + g.toUpperCase() + b.toUpperCase();\n },\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa: function() {\n var source = this.getSource(), a;\n\n a = Math.round(source[3] * 255);\n a = a.toString(16);\n a = (a.length === 1) ? ('0' + a) : a;\n\n return this.toHex() + a.toUpperCase();\n },\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha: function() {\n return this.getSource()[3];\n },\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {fabric.Color} thisArg\n */\n setAlpha: function(alpha) {\n var source = this.getSource();\n source[3] = alpha;\n this.setSource(source);\n return this;\n },\n\n /**\n * Transforms color to its grayscale representation\n * @return {fabric.Color} thisArg\n */\n toGrayscale: function() {\n var source = this.getSource(),\n average = parseInt((source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0), 10),\n currentAlpha = source[3];\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {fabric.Color} thisArg\n */\n toBlackWhite: function(threshold) {\n var source = this.getSource(),\n average = (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\n currentAlpha = source[3];\n\n threshold = threshold || 127;\n\n average = (Number(average) < Number(threshold)) ? 0 : 255;\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Overlays color with another color\n * @param {String|fabric.Color} otherColor\n * @return {fabric.Color} thisArg\n */\n overlayWith: function(otherColor) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n var result = [],\n alpha = this.getAlpha(),\n otherAlpha = 0.5,\n source = this.getSource(),\n otherSource = otherColor.getSource(), i;\n\n for (i = 0; i < 3; i++) {\n result.push(Math.round((source[i] * (1 - otherAlpha)) + (otherSource[i] * otherAlpha)));\n }\n\n result[3] = alpha;\n this.setSource(result);\n return this;\n }\n };\n\n /**\n * Regex matching color in RGB or RGBA formats (ex: rgb(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n // eslint-disable-next-line max-len\n fabric.Color.reRGBa = /^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*((?:\\d*\\.?\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHSLa = /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}\\%)\\s*,\\s*(\\d{1,3}\\%)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\n /**\n * Map of the 148 color names with HEX code\n * @static\n * @field\n * @memberOf fabric.Color\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\n fabric.Color.colorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32'\n };\n\n /**\n * @private\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\n function hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {fabric.Color}\n */\n fabric.Color.fromRgb = function(color) {\n return Color.fromSource(Color.sourceFromRgb(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {Array} source\n */\n fabric.Color.sourceFromRgb = function(color) {\n var match = color.match(Color.reRGBa);\n if (match) {\n var r = parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1) * (/%$/.test(match[1]) ? 255 : 1),\n g = parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1) * (/%$/.test(match[2]) ? 255 : 1),\n b = parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1) * (/%$/.test(match[3]) ? 255 : 1);\n\n return [\n parseInt(r, 10),\n parseInt(g, 10),\n parseInt(b, 10),\n match[4] ? parseFloat(match[4]) : 1\n ];\n }\n };\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromRgba = Color.fromRgb;\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf fabric.Color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsl = function(color) {\n return Color.fromSource(Color.sourceFromHsl(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf fabric.Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {Array} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n fabric.Color.sourceFromHsl = function(color) {\n var match = color.match(Color.reHSLa);\n if (!match) {\n return;\n }\n\n var h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),\n l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1),\n r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n }\n else {\n var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n match[4] ? parseFloat(match[4]) : 1\n ];\n };\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsla = Color.fromHsl;\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color Color value ex: FF5555\n * @return {fabric.Color}\n */\n fabric.Color.fromHex = function(color) {\n return Color.fromSource(Color.sourceFromHex(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {Array} source\n */\n fabric.Color.sourceFromHex = function(color) {\n if (color.match(Color.reHex)) {\n var value = color.slice(color.indexOf('#') + 1),\n isShortNotation = (value.length === 3 || value.length === 4),\n isRGBa = (value.length === 8 || value.length === 4),\n r = isShortNotation ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2),\n g = isShortNotation ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4),\n b = isShortNotation ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6),\n a = isRGBa ? (isShortNotation ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF';\n\n return [\n parseInt(r, 16),\n parseInt(g, 16),\n parseInt(b, 16),\n parseFloat((parseInt(a, 16) / 255).toFixed(2))\n ];\n }\n };\n\n /**\n * Returns new color object, when given color in array representation (ex: [200, 100, 100, 0.5])\n * @static\n * @memberOf fabric.Color\n * @param {Array} source\n * @return {fabric.Color}\n */\n fabric.Color.fromSource = function(source) {\n var oColor = new Color();\n oColor.setSource(source);\n return oColor;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],\n skewMap = ['ns', 'nesw', 'ew', 'nwse'],\n controls = {},\n LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',\n opposite = {\n top: BOTTOM,\n bottom: TOP,\n left: RIGHT,\n right: LEFT,\n center: CENTER,\n }, radiansToDegrees = fabric.util.radiansToDegrees,\n sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });\n\n /**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n * @param {fabric.Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\n function findCornerQuadrant(fabricObject, control) {\n var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n }\n\n function fireEvent(eventName, options) {\n var target = options.transform.target,\n canvas = target.canvas,\n canvasOptions = fabric.util.object.clone(options);\n canvasOptions.target = target;\n canvas && canvas.fire('object:' + eventName, canvasOptions);\n target.fire(eventName, options);\n }\n\n /**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\n function scaleIsProportional(eventData, fabricObject) {\n var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,\n uniformIsToggled = eventData[uniScaleKey];\n return (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled);\n }\n\n /**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\n function isTransformCentered(transform) {\n return transform.originX === CENTER && transform.originY === CENTER;\n }\n\n /**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\n function scalingIsForbidden(fabricObject, by, scaleProportionally) {\n var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n return false;\n }\n\n /**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed',\n scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by = '';\n if (control.x !== 0 && control.y === 0) {\n by = 'x';\n }\n else if (control.x === 0 && control.y !== 0) {\n by = 'y';\n }\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control);\n return scaleMap[n] + '-resize';\n }\n\n /**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function skewCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed';\n if (control.x !== 0 && fabricObject.lockSkewingY) {\n return notAllowed;\n }\n if (control.y !== 0 && fabricObject.lockSkewingX) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control) % 4;\n return skewMap[n] + '-resize';\n }\n\n /**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {\n if (eventData[fabricObject.canvas.altActionKey]) {\n return controls.skewCursorStyleHandler(eventData, control, fabricObject);\n }\n return controls.scaleCursorStyleHandler(eventData, control, fabricObject);\n }\n\n /**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\n function scaleOrSkewActionName(eventData, control, fabricObject) {\n var isAlternative = eventData[fabricObject.canvas.altActionKey];\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewX' : 'scaleY';\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewY' : 'scaleX';\n }\n }\n\n /**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function rotationStyleHandler(eventData, control, fabricObject) {\n if (fabricObject.lockRotation) {\n return 'not-allowed';\n }\n return control.cursorStyle;\n }\n\n function commonEventInfo(eventData, transform, x, y) {\n return {\n e: eventData,\n transform: transform,\n pointer: {\n x: x,\n y: y,\n }\n };\n }\n\n /**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFixedAnchor(actionHandler) {\n return function(eventData, transform, x, y) {\n var target = transform.target, centerPoint = target.getCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n target.setPositionByOrigin(constraint, transform.originX, transform.originY);\n return actionPerformed;\n };\n }\n\n /**\n * Wrap an action handler with firing an event if the action is performed\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFireEvent(eventName, actionHandler) {\n return function(eventData, transform, x, y) {\n var actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\n }\n return actionPerformed;\n };\n }\n\n /**\n * Transforms a point described by x and y in a distance from the top left corner of the object\n * bounding box.\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\n function getLocalPoint(transform, originX, originY, x, y) {\n var target = transform.target,\n control = target.controls[transform.corner],\n zoom = target.canvas.getZoom(),\n padding = target.padding / zoom,\n localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n }\n\n /**\n * Detect if the fabric object is flipped on one side.\n * @param {fabric.Object} target\n * @return {Boolean} true if one flip, but not two.\n */\n function targetHasOneFlip(target) {\n return target.flipX !== target.flipY;\n }\n\n /**\n * Utility function to compensate the scale factor when skew is applied on both axes\n * @private\n */\n function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {\n if (target[oppositeSkew] !== 0) {\n var newDim = target._getTransformedDimensions()[axis];\n var newValue = reference / newDim * target[scaleToCompensate];\n target.set(scaleToCompensate, newValue);\n }\n }\n\n /**\n * Action handler for skewing on the X axis\n * @private\n */\n function skewObjectX(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(0, target.skewY),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,\n currentSkew = target.skewX, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().y;\n target.set('skewX', newSkew);\n compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Action handler for skewing on the Y axis\n * @private\n */\n function skewObjectY(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(target.skewX, 0),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,\n currentSkew = target.skewY, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().x;\n target.set('skewY', newSkew);\n compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerX(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewX > 0 and originY bottom we anchor on right\n // if skewX > 0 and originY top we anchor on left\n // if skewX < 0 and originY bottom we anchor on left\n // if skewX < 0 and originY top we anchor on right\n // if skewX is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;\n if (target.lockSkewingX) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.x > 0) {\n // we are pulling right, anchor left;\n originX = LEFT;\n }\n else {\n // we are pulling right, anchor right\n originX = RIGHT;\n }\n }\n else {\n if (currentSkew > 0) {\n originX = originY === TOP ? LEFT : RIGHT;\n }\n if (currentSkew < 0) {\n originX = originY === TOP ? RIGHT : LEFT;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originX = originX === LEFT ? RIGHT : LEFT;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originX = originX;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerY(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewY > 0 and originX left we anchor on top\n // if skewY > 0 and originX right we anchor on bottom\n // if skewY < 0 and originX left we anchor on bottom\n // if skewY < 0 and originX right we anchor on top\n // if skewY is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;\n if (target.lockSkewingY) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.y > 0) {\n // we are pulling down, anchor up;\n originY = TOP;\n }\n else {\n // we are pulling up, anchor down\n originY = BOTTOM;\n }\n }\n else {\n if (currentSkew > 0) {\n originY = originX === LEFT ? TOP : BOTTOM;\n }\n if (currentSkew < 0) {\n originY = originX === LEFT ? BOTTOM : TOP;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originY = originY === TOP ? BOTTOM : TOP;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originY = originY;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\n function rotationWithSnapping(eventData, transform, x, y) {\n var t = transform,\n target = t.target,\n pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n if (target.lockRotation) {\n return false;\n }\n\n var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n hasRotated = true;\n\n if (target.snapAngle > 0) {\n var snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n }\n else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n hasRotated = target.angle !== angle;\n target.angle = angle;\n return hasRotated;\n }\n\n /**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\n function scaleObject(eventData, transform, x, y, options) {\n options = options || {};\n var target = transform.target,\n lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,\n by = options.by, newPoint, scaleX, scaleY, dim,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally),\n signX, signY, gestureScale = transform.gestureScale;\n\n if (forbidScaling) {\n return false;\n }\n if (gestureScale) {\n scaleX = transform.scaleX * gestureScale;\n scaleY = transform.scaleY * gestureScale;\n }\n else {\n newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? sign(newPoint.x) : 1;\n signY = by !== 'x' ? sign(newPoint.y) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (target.lockScalingFlip &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n original = transform.original,\n originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +\n Math.abs(dim.y * original.scaleY / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n }\n else {\n scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);\n scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = opposite[transform.originX];\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = opposite[transform.originY];\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken are in the setter.\n var oldScaleX = target.scaleX, oldScaleY = target.scaleY;\n if (!by) {\n !lockScalingX && target.set('scaleX', scaleX);\n !lockScalingY && target.set('scaleY', scaleY);\n }\n else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set('scaleX', scaleX);\n by === 'y' && target.set('scaleY', scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n }\n\n /**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectFromCorner(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y);\n }\n\n /**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectX(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'x' });\n }\n\n /**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectY(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'y' });\n }\n\n /**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingYOrSkewingX(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerX(eventData, transform, x, y);\n }\n return controls.scalingY(eventData, transform, x, y);\n }\n\n /**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingXOrSkewingY(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerY(eventData, transform, x, y);\n }\n return controls.scalingX(eventData, transform, x, y);\n }\n\n /**\n * Action handler to change textbox width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function changeWidth(eventData, transform, x, y) {\n var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 0));\n return oldWidth !== newWidth;\n }\n\n /**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\n function dragHandler(eventData, transform, x, y) {\n var target = transform.target,\n newLeft = x - transform.offsetX,\n newTop = y - transform.offsetY,\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\n moveY = !target.get('lockMovementY') && target.top !== newTop;\n moveX && target.set('left', newLeft);\n moveY && target.set('top', newTop);\n if (moveX || moveY) {\n fireEvent('moving', commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n }\n\n controls.scaleCursorStyleHandler = scaleCursorStyleHandler;\n controls.skewCursorStyleHandler = skewCursorStyleHandler;\n controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;\n controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));\n controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));\n controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));\n controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));\n controls.scalingYOrSkewingX = scalingYOrSkewingX;\n controls.scalingXOrSkewingY = scalingXOrSkewingY;\n controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));\n controls.skewHandlerX = skewHandlerX;\n controls.skewHandlerY = skewHandlerY;\n controls.dragHandler = dragHandler;\n controls.scaleOrSkewActionName = scaleOrSkewActionName;\n controls.rotationStyleHandler = rotationStyleHandler;\n controls.fireEvent = fireEvent;\n controls.wrapWithFixedAnchor = wrapWithFixedAnchor;\n controls.wrapWithFireEvent = wrapWithFireEvent;\n controls.getLocalPoint = getLocalPoint;\n fabric.controlsUtils = controls;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n degreesToRadians = fabric.util.degreesToRadians,\n controls = fabric.controlsUtils;\n\n /**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderCircleControl (ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n myLeft = left,\n myTop = top, size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // as soon as fabric react v5, remove ie11, use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = top * xSize / ySize;\n }\n else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = left * ySize / xSize;\n }\n else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, 2 * Math.PI, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n }\n\n /**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderSquareControl(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor\n ), xSizeBy2 = xSize / 2, ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n ctx.rotate(degreesToRadians(fabricObject.angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[methodName + 'Rect'](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n }\n\n controls.renderCircleControl = renderCircleControl;\n controls.renderSquareControl = renderSquareControl;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n function Control(options) {\n for (var i in options) {\n this[i] = options[i];\n }\n }\n\n fabric.Control = Control;\n\n fabric.Control.prototype = /** @lends fabric.Control.prototype */ {\n\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the controlset.\n * @type {Boolean}\n * @default true\n */\n visible: true,\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName: 'scale',\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle: 0,\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x: 0,\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y: 0,\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundindbox, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX: 0,\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY: 0,\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX: null,\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY: null,\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX: null,\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY: null,\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle: 'crosshair',\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection: false,\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n actionHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseDownHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseUpHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler: function(/* eventData, fabricObject, control */) {\n return this.actionHandler;\n },\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseDownHandler;\n },\n\n /**\n * Returns control mouseUp handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseUpHandler;\n },\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler: function(eventData, control /* fabricObject */) {\n return control.cursorStyle;\n },\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n getActionName: function(eventData, control /* fabricObject */) {\n return control.actionName;\n },\n\n /**\n * Returns controls visibility\n * @param {fabric.Object} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility: function(fabricObject, controlKey) {\n var objectVisibility = fabricObject._controlsVisibility;\n if (objectVisibility && typeof objectVisibility[controlKey] !== 'undefined') {\n return objectVisibility[controlKey];\n }\n return this.visible;\n },\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility: function(visibility /* name, fabricObject */) {\n this.visible = visibility;\n },\n\n\n positionHandler: function(dim, finalMatrix /*, fabricObject, currentControl */) {\n var point = fabric.util.transformPoint({\n x: this.x * dim.x + this.offsetX,\n y: this.y * dim.y + this.offsetY }, finalMatrix);\n return point;\n },\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords: function(objectAngle, objectCornerSize, centerX, centerY, isTouch) {\n var cosHalfOffset,\n sinHalfOffset,\n cosHalfOffsetComp,\n sinHalfOffsetComp,\n xSize = (isTouch) ? this.touchSizeX : this.sizeX,\n ySize = (isTouch) ? this.touchSizeY : this.sizeY;\n if (xSize && ySize && xSize !== ySize) {\n // handle rectangular corners\n var controlTriangleAngle = Math.atan2(ySize, xSize);\n var cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\n var newTheta = controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n var newThetaComp = Math.PI / 2 - controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta);\n // use complementary angle for two corners\n cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newThetaComp);\n sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newThetaComp);\n }\n else {\n // handle square corners\n // use default object corner size unless size is defined\n var cornerSize = (xSize && ySize) ? xSize : objectCornerSize;\n /* 0.7071067812 stands for sqrt(2)/2 */\n cornerHypotenuse = cornerSize * 0.7071067812;\n // complementary angles are equal since they're both 45 degrees\n var newTheta = fabric.util.degreesToRadians(45 - objectAngle);\n cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newTheta);\n }\n\n return {\n tl: {\n x: centerX - sinHalfOffsetComp,\n y: centerY - cosHalfOffsetComp,\n },\n tr: {\n x: centerX + cosHalfOffset,\n y: centerY - sinHalfOffset,\n },\n bl: {\n x: centerX - cosHalfOffset,\n y: centerY + sinHalfOffset,\n },\n br: {\n x: centerX + sinHalfOffsetComp,\n y: centerY + cosHalfOffsetComp,\n },\n };\n },\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {fabric.Object} fabricObject the object where the control is about to be rendered\n */\n render: function(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject);\n break;\n default:\n fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject);\n }\n },\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n /* _FROM_SVG_START_ */\n function getColorStop(el, multiplier) {\n var style = el.getAttribute('style'),\n offset = el.getAttribute('offset') || 0,\n color, colorAlpha, opacity, i;\n\n // convert percents to absolute values\n offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1);\n offset = offset < 0 ? 0 : offset > 1 ? 1 : offset;\n if (style) {\n var keyValuePairs = style.split(/\\s*;\\s*/);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (i = keyValuePairs.length; i--; ) {\n\n var split = keyValuePairs[i].split(/\\s*:\\s*/),\n key = split[0].trim(),\n value = split[1].trim();\n\n if (key === 'stop-color') {\n color = value;\n }\n else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n if (!color) {\n color = el.getAttribute('stop-color') || 'rgb(0,0,0)';\n }\n if (!opacity) {\n opacity = el.getAttribute('stop-opacity');\n }\n\n color = new fabric.Color(color);\n colorAlpha = color.getAlpha();\n opacity = isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity);\n opacity *= colorAlpha * multiplier;\n\n return {\n offset: offset,\n color: color.toRgb(),\n opacity: opacity\n };\n }\n\n function getLinearCoords(el) {\n return {\n x1: el.getAttribute('x1') || 0,\n y1: el.getAttribute('y1') || 0,\n x2: el.getAttribute('x2') || '100%',\n y2: el.getAttribute('y2') || 0\n };\n }\n\n function getRadialCoords(el) {\n return {\n x1: el.getAttribute('fx') || el.getAttribute('cx') || '50%',\n y1: el.getAttribute('fy') || el.getAttribute('cy') || '50%',\n r1: 0,\n x2: el.getAttribute('cx') || '50%',\n y2: el.getAttribute('cy') || '50%',\n r2: el.getAttribute('r') || '50%'\n };\n }\n /* _FROM_SVG_END_ */\n\n var clone = fabric.util.object.clone;\n\n /**\n * Gradient class\n * @class fabric.Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n * @see {@link fabric.Gradient#initialize} for constructor definition\n */\n fabric.Gradient = fabric.util.createClass(/** @lends fabric.Gradient.prototype */ {\n\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n offsetX: 0,\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n offsetY: 0,\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n gradientTransform: null,\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type String\n * @default 'pixels'\n */\n gradientUnits: 'pixels',\n\n /**\n * Gradient type linear or radial\n * @type String\n * @default 'pixels'\n */\n type: 'linear',\n\n /**\n * Constructor\n * @param {Object} options Options object with type, coords, gradientUnits and colorStops\n * @param {Object} [options.type] gradient type linear or radial\n * @param {Object} [options.gradientUnits] gradient units\n * @param {Object} [options.offsetX] SVG import compatibility\n * @param {Object} [options.offsetY] SVG import compatibility\n * @param {Object[]} options.colorStops contains the colorstops.\n * @param {Object} options.coords contains the coords of the gradient\n * @param {Number} [options.coords.x1] X coordiante of the first point for linear or of the focal point for radial\n * @param {Number} [options.coords.y1] Y coordiante of the first point for linear or of the focal point for radial\n * @param {Number} [options.coords.x2] X coordiante of the second point for linear or of the center point for radial\n * @param {Number} [options.coords.y2] Y coordiante of the second point for linear or of the center point for radial\n * @param {Number} [options.coords.r1] only for radial gradient, radius of the inner circle\n * @param {Number} [options.coords.r2] only for radial gradient, radius of the external circle\n * @return {fabric.Gradient} thisArg\n */\n initialize: function(options) {\n options || (options = { });\n options.coords || (options.coords = { });\n\n var coords, _this = this;\n\n // sets everything, then coords and colorstops get sets again\n Object.keys(options).forEach(function(option) {\n _this[option] = options[option];\n });\n\n if (this.id) {\n this.id += '_' + fabric.Object.__uid++;\n }\n else {\n this.id = fabric.Object.__uid++;\n }\n\n coords = {\n x1: options.coords.x1 || 0,\n y1: options.coords.y1 || 0,\n x2: options.coords.x2 || 0,\n y2: options.coords.y2 || 0\n };\n\n if (this.type === 'radial') {\n coords.r1 = options.coords.r1 || 0;\n coords.r2 = options.coords.r2 || 0;\n }\n\n this.coords = coords;\n this.colorStops = options.colorStops.slice();\n },\n\n /**\n * Adds another colorStop\n * @param {Object} colorStop Object with offset and color\n * @return {fabric.Gradient} thisArg\n */\n addColorStop: function(colorStops) {\n for (var position in colorStops) {\n var color = new fabric.Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha()\n });\n }\n return this;\n },\n\n /**\n * Returns object representation of a gradient\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object}\n */\n toObject: function(propertiesToInclude) {\n var object = {\n type: this.type,\n coords: this.coords,\n colorStops: this.colorStops,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform\n };\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n return object;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {Object} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG: function(object, options) {\n var coords = clone(this.coords, true), i, len, options = options || {},\n markup, commonAttributes, colorStops = clone(this.colorStops, true),\n needsSwap = coords.r1 > coords.r2,\n transform = this.gradientTransform ? this.gradientTransform.concat() : fabric.iMatrix.concat(),\n offsetX = -this.offsetX, offsetY = -this.offsetY,\n withViewport = !!options.additionalTransform,\n gradientUnits = this.gradientUnits === 'pixels' ? 'userSpaceOnUse' : 'objectBoundingBox';\n // colorStops must be sorted ascending\n colorStops.sort(function(a, b) {\n return a.offset - b.offset;\n });\n\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n }\n else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n if (object.type === 'path' && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n\n\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n commonAttributes = 'id=\"SVGID_' + this.id +\n '\" gradientUnits=\"' + gradientUnits + '\"';\n commonAttributes += ' gradientTransform=\"' + (withViewport ?\n options.additionalTransform + ' ' : '') + fabric.util.matrixToSVG(transform) + '\" ';\n\n if (this.type === 'linear') {\n markup = [\n '\\n'\n ];\n }\n else if (this.type === 'radial') {\n // svg radial gradient has just 1 radius. the biggest.\n markup = [\n '\\n'\n ];\n }\n\n if (this.type === 'radial') {\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops = colorStops.concat();\n colorStops.reverse();\n for (i = 0, len = colorStops.length; i < len; i++) {\n colorStops[i].offset = 1 - colorStops[i].offset;\n }\n }\n var minRadius = Math.min(coords.r1, coords.r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n var maxRadius = Math.max(coords.r1, coords.r2),\n percentageShift = minRadius / maxRadius;\n for (i = 0, len = colorStops.length; i < len; i++) {\n colorStops[i].offset += percentageShift * (1 - colorStops[i].offset);\n }\n }\n }\n\n for (i = 0, len = colorStops.length; i < len; i++) {\n var colorStop = colorStops[i];\n markup.push(\n '\\n'\n );\n }\n\n markup.push((this.type === 'linear' ? '\\n' : '\\n'));\n\n return markup.join('');\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive: function(ctx) {\n var gradient, coords = fabric.util.object.clone(this.coords), i, len;\n\n if (!this.type) {\n return;\n }\n\n if (this.type === 'linear') {\n gradient = ctx.createLinearGradient(\n coords.x1, coords.y1, coords.x2, coords.y2);\n }\n else if (this.type === 'radial') {\n gradient = ctx.createRadialGradient(\n coords.x1, coords.y1, coords.r1, coords.x2, coords.y2, coords.r2);\n }\n\n for (i = 0, len = this.colorStops.length; i < len; i++) {\n var color = this.colorStops[i].color,\n opacity = this.colorStops[i].opacity,\n offset = this.colorStops[i].offset;\n\n if (typeof opacity !== 'undefined') {\n color = new fabric.Color(color).setAlpha(opacity).toRgba();\n }\n gradient.addColorStop(offset, color);\n }\n\n return gradient;\n }\n });\n\n fabric.util.object.extend(fabric.Gradient, {\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link fabric.Gradient} instance from an SVG element\n * @static\n * @memberOf fabric.Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {fabric.Object} instance\n * @param {String} opacityAttr A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {Object} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @param {Object.number} viewBoxWidth width part of the viewBox attribute on svg\n * @param {Object.number} viewBoxHeight height part of the viewBox attribute on svg\n * @param {Object.number} width width part of the svg tag if viewBox is not specified\n * @param {Object.number} height height part of the svg tag if viewBox is not specified\n * @return {fabric.Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n */\n fromElement: function(el, instance, opacityAttr, svgOptions) {\n /**\n * @example:\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n\n var multiplier = parseFloat(opacityAttr) / (/%$/.test(opacityAttr) ? 100 : 1);\n multiplier = multiplier < 0 ? 0 : multiplier > 1 ? 1 : multiplier;\n if (isNaN(multiplier)) {\n multiplier = 1;\n }\n\n var colorStopEls = el.getElementsByTagName('stop'),\n type,\n gradientUnits = el.getAttribute('gradientUnits') === 'userSpaceOnUse' ?\n 'pixels' : 'percentage',\n gradientTransform = el.getAttribute('gradientTransform') || '',\n colorStops = [],\n coords, i, offsetX = 0, offsetY = 0,\n transformMatrix;\n if (el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT') {\n type = 'linear';\n coords = getLinearCoords(el);\n }\n else {\n type = 'radial';\n coords = getRadialCoords(el);\n }\n\n for (i = colorStopEls.length; i--; ) {\n colorStops.push(getColorStop(colorStopEls[i], multiplier));\n }\n\n transformMatrix = fabric.parseTransformAttribute(gradientTransform);\n\n __convertPercentUnitsToValues(instance, coords, svgOptions, gradientUnits);\n\n if (gradientUnits === 'pixels') {\n offsetX = -instance.left;\n offsetY = -instance.top;\n }\n\n var gradient = new fabric.Gradient({\n id: el.getAttribute('id'),\n type: type,\n coords: coords,\n colorStops: colorStops,\n gradientUnits: gradientUnits,\n gradientTransform: transformMatrix,\n offsetX: offsetX,\n offsetY: offsetY,\n });\n\n return gradient;\n }\n /* _FROM_SVG_END_ */\n });\n\n /**\n * @private\n */\n function __convertPercentUnitsToValues(instance, options, svgOptions, gradientUnits) {\n var propValue, finalValue;\n Object.keys(options).forEach(function(prop) {\n propValue = options[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n }\n else if (propValue === '-Infinity') {\n finalValue = 0;\n }\n else {\n finalValue = parseFloat(options[prop], 10);\n if (typeof propValue === 'string' && /^(\\d+\\.\\d+)%|(\\d+)%$/.test(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= svgOptions.viewBoxWidth || svgOptions.width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= svgOptions.viewBoxHeight || svgOptions.height;\n }\n }\n }\n }\n options[prop] = finalValue;\n });\n }\n})();\n\n\n(function() {\n\n 'use strict';\n\n var toFixed = fabric.util.toFixed;\n\n /**\n * Pattern class\n * @class fabric.Pattern\n * @see {@link http://fabricjs.com/patterns|Pattern demo}\n * @see {@link http://fabricjs.com/dynamic-patterns|DynamicPattern demo}\n * @see {@link fabric.Pattern#initialize} for constructor definition\n */\n\n\n fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ {\n\n /**\n * Repeat property of a pattern (one of repeat, repeat-x, repeat-y or no-repeat)\n * @type String\n * @default\n */\n repeat: 'repeat',\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX: 0,\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY: 0,\n\n /**\n * crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @type String\n * @default\n */\n crossOrigin: '',\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @type Array\n * @default\n */\n patternTransform: null,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {Function} [callback] function to invoke after callback init.\n * @return {fabric.Pattern} thisArg\n */\n initialize: function(options, callback) {\n options || (options = { });\n\n this.id = fabric.Object.__uid++;\n this.setOptions(options);\n if (!options.source || (options.source && typeof options.source !== 'string')) {\n callback && callback(this);\n return;\n }\n else {\n // img src string\n var _this = this;\n this.source = fabric.util.createImage();\n fabric.util.loadImage(options.source, function(img, isError) {\n _this.source = img;\n callback && callback(_this, isError);\n }, null, this.crossOrigin);\n }\n },\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of a pattern instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n source, object;\n\n // element\n if (typeof this.source.src === 'string') {\n source = this.source.src;\n }\n // element\n else if (typeof this.source === 'object' && this.source.toDataURL) {\n source = this.source.toDataURL();\n }\n\n object = {\n type: 'pattern',\n source: source,\n repeat: this.repeat,\n crossOrigin: this.crossOrigin,\n offsetX: toFixed(this.offsetX, NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform ? this.patternTransform.concat() : null\n };\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n return object;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n * @param {fabric.Object} object\n * @return {String} SVG representation of a pattern\n */\n toSVG: function(object) {\n var patternSource = typeof this.source === 'function' ? this.source() : this.source,\n patternWidth = patternSource.width / object.width,\n patternHeight = patternSource.height / object.height,\n patternOffsetX = this.offsetX / object.width,\n patternOffsetY = this.offsetY / object.height,\n patternImgSrc = '';\n if (this.repeat === 'repeat-x' || this.repeat === 'no-repeat') {\n patternHeight = 1;\n if (patternOffsetY) {\n patternHeight += Math.abs(patternOffsetY);\n }\n }\n if (this.repeat === 'repeat-y' || this.repeat === 'no-repeat') {\n patternWidth = 1;\n if (patternOffsetX) {\n patternWidth += Math.abs(patternOffsetX);\n }\n\n }\n if (patternSource.src) {\n patternImgSrc = patternSource.src;\n }\n else if (patternSource.toDataURL) {\n patternImgSrc = patternSource.toDataURL();\n }\n\n return '\\n' +\n '\\n' +\n '\\n';\n },\n /* _TO_SVG_END_ */\n\n setOptions: function(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive: function(ctx) {\n var source = this.source;\n // if the image failed to load, return, and allow rest to continue loading\n if (!source) {\n return '';\n }\n\n // if an image\n if (typeof source.src !== 'undefined') {\n if (!source.complete) {\n return '';\n }\n if (source.naturalWidth === 0 || source.naturalHeight === 0) {\n return '';\n }\n }\n return ctx.createPattern(source, this.repeat);\n }\n });\n})();\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n toFixed = fabric.util.toFixed;\n\n if (fabric.Shadow) {\n fabric.warn('fabric.Shadow is already defined.');\n return;\n }\n\n /**\n * Shadow class\n * @class fabric.Shadow\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @see {@link fabric.Shadow#initialize} for constructor definition\n */\n fabric.Shadow = fabric.util.createClass(/** @lends fabric.Shadow.prototype */ {\n\n /**\n * Shadow color\n * @type String\n * @default\n */\n color: 'rgb(0,0,0)',\n\n /**\n * Shadow blur\n * @type Number\n */\n blur: 0,\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n offsetX: 0,\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n offsetY: 0,\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n affectStroke: false,\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n nonScaling: false,\n\n /**\n * Constructor\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n * @return {fabric.Shadow} thisArg\n */\n initialize: function(options) {\n\n if (typeof options === 'string') {\n options = this._parseShadow(options);\n }\n\n for (var prop in options) {\n this[prop] = options[prop];\n }\n\n this.id = fabric.Object.__uid++;\n },\n\n /**\n * @private\n * @param {String} shadow Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n _parseShadow: function(shadow) {\n var shadowStr = shadow.trim(),\n offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [],\n color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)';\n\n return {\n color: color.trim(),\n offsetX: parseFloat(offsetsAndBlur[1], 10) || 0,\n offsetY: parseFloat(offsetsAndBlur[2], 10) || 0,\n blur: parseFloat(offsetsAndBlur[3], 10) || 0\n };\n },\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString: function() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a shadow\n * @param {fabric.Object} object\n * @return {String} SVG representation of a shadow\n */\n toSVG: function(object) {\n var fBoxX = 40, fBoxY = 40, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n offset = fabric.util.rotateVector(\n { x: this.offsetX, y: this.offsetY },\n fabric.util.degreesToRadians(-object.angle)),\n BLUR_BOX = 20, color = new fabric.Color(this.color);\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX = toFixed((Math.abs(offset.x) + this.blur) / object.width, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n fBoxY = toFixed((Math.abs(offset.y) + this.blur) / object.height, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return (\n '\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\t\\n' +\n '\\t\\t\\n' +\n '\\t\\n' +\n '\\n');\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject: function() {\n if (this.includeDefaultValues) {\n return {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling\n };\n }\n var obj = { }, proto = fabric.Shadow.prototype;\n\n ['color', 'blur', 'offsetX', 'offsetY', 'affectStroke', 'nonScaling'].forEach(function(prop) {\n if (this[prop] !== proto[prop]) {\n obj[prop] = this[prop];\n }\n }, this);\n\n return obj;\n }\n });\n\n /**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * @static\n * @field\n * @memberOf fabric.Shadow\n */\n // eslint-disable-next-line max-len\n fabric.Shadow.reOffsetsAndBlur = /(?:\\s|^)(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(\\d+(?:\\.\\d*)?(?:px)?)?(?:\\s?|$)(?:$|\\s)/;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function () {\n\n 'use strict';\n\n if (fabric.StaticCanvas) {\n fabric.warn('fabric.StaticCanvas is already defined.');\n return;\n }\n\n // aliases for faster resolution\n var extend = fabric.util.object.extend,\n getElementOffset = fabric.util.getElementOffset,\n removeFromArray = fabric.util.removeFromArray,\n toFixed = fabric.util.toFixed,\n transformPoint = fabric.util.transformPoint,\n invertTransform = fabric.util.invertTransform,\n getNodeCanvas = fabric.util.getNodeCanvas,\n createCanvasElement = fabric.util.createCanvasElement,\n\n CANVAS_INIT_ERROR = new Error('Could not initialize `canvas` element');\n\n /**\n * Static canvas class\n * @class fabric.StaticCanvas\n * @mixes fabric.Collection\n * @mixes fabric.Observable\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @see {@link fabric.StaticCanvas#initialize} for constructor definition\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n fabric.StaticCanvas = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n },\n\n /**\n * Background color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setBackgroundColor}.\n * @type {(String|fabric.Pattern)}\n * @default\n */\n backgroundColor: '',\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n backgroundImage: null,\n\n /**\n * Overlay color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setOverlayColor}\n * @since 1.3.9\n * @type {(String|fabric.Pattern)}\n * @default\n */\n overlayColor: '',\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n overlayImage: null,\n\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * Indicates whether objects' state should be saved\n * @type Boolean\n * @default\n */\n stateful: false,\n\n /**\n * Indicates whether {@link fabric.Collection.add}, {@link fabric.Collection.insertAt} and {@link fabric.Collection.remove},\n * {@link fabric.StaticCanvas.moveTo}, {@link fabric.StaticCanvas.clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are quequed and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: true,\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n */\n controlsAboveOverlay: false,\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * @type Boolean\n * @default\n */\n allowTouchScrolling: false,\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: true,\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: fabric.iMatrix.concat(),\n\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n backgroundVpt: true,\n\n /**\n * if set to false overlya image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n overlayVpt: true,\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: true,\n\n /**\n * Describe canvas element extension over design\n * properties are tl,tr,bl,br.\n * if canvas is not zoomed/panned those points are the four corner of canvas\n * if canvas is viewportTransformed you those points indicate the extension\n * of canvas element in plain untrasformed coordinates\n * The coordinates get updated with @method calcViewportBoundaries.\n * @memberOf fabric.StaticCanvas.prototype\n */\n vptCoords: { },\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @memberOf fabric.StaticCanvas.prototype\n * @type Boolean\n * @default\n */\n skipOffscreen: true,\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * @private\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n */\n _initStatic: function(el, options) {\n var cb = this.requestRenderAllBound;\n this._objects = [];\n this._createLowerCanvas(el);\n this._initOptions(options);\n // only initialize retina scaling once\n if (!this.interactive) {\n this._initRetinaScaling();\n }\n\n if (options.overlayImage) {\n this.setOverlayImage(options.overlayImage, cb);\n }\n if (options.backgroundImage) {\n this.setBackgroundImage(options.backgroundImage, cb);\n }\n if (options.backgroundColor) {\n this.setBackgroundColor(options.backgroundColor, cb);\n }\n if (options.overlayColor) {\n this.setOverlayColor(options.overlayColor, cb);\n }\n this.calcOffset();\n },\n\n /**\n * @private\n */\n _isRetinaScaling: function() {\n return (fabric.devicePixelRatio > 1 && this.enableRetinaScaling);\n },\n\n /**\n * @private\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling: function() {\n return this._isRetinaScaling() ? Math.max(1, fabric.devicePixelRatio) : 1;\n },\n\n /**\n * @private\n */\n _initRetinaScaling: function() {\n if (!this._isRetinaScaling()) {\n return;\n }\n var scaleRatio = fabric.devicePixelRatio;\n this.__initRetinaScaling(scaleRatio, this.lowerCanvasEl, this.contextContainer);\n if (this.upperCanvasEl) {\n this.__initRetinaScaling(scaleRatio, this.upperCanvasEl, this.contextTop);\n }\n },\n\n __initRetinaScaling: function(scaleRatio, canvas, context) {\n canvas.setAttribute('width', this.width * scaleRatio);\n canvas.setAttribute('height', this.height * scaleRatio);\n context.scale(scaleRatio, scaleRatio);\n },\n\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n * @return {fabric.Canvas} instance\n * @chainable\n */\n calcOffset: function () {\n this._offset = getElementOffset(this.lowerCanvasEl);\n return this;\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayImage|overlay image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set overlay to\n * @param {Function} callback callback to invoke when image is loaded and set as an overlay\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|overlay image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/MnzHT/|jsFiddle demo}\n * @example Normal overlayImage with left/top = 0\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage with different properties\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched overlayImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/jail_cell_bars.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setOverlayImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched overlayImage #2 - width/height correspond to canvas width/height\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage loaded from cross-origin\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n setOverlayImage: function (image, callback, options) {\n return this.__setBgOverlayImage('overlayImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundImage|background image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set background to\n * @param {Function} callback Callback to invoke when image is loaded and set as background\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|background image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/djnr8o7a/28/|jsFiddle demo}\n * @example Normal backgroundImage with left/top = 0\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage with different properties\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched backgroundImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/honey_im_subtle.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched backgroundImage #2 - width/height correspond to canvas width/height\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage loaded from cross-origin\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n // TODO: fix stretched examples\n setBackgroundImage: function (image, callback, options) {\n return this.__setBgOverlayImage('backgroundImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayColor|foreground color} for this canvas\n * @param {(String|fabric.Pattern)} overlayColor Color or pattern to set foreground color to\n * @param {Function} callback Callback to invoke when foreground color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/pB55h/|jsFiddle demo}\n * @example Normal overlayColor - color value\n * canvas.setOverlayColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor with repeat and offset\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setOverlayColor: function(overlayColor, callback) {\n return this.__setBgOverlayColor('overlayColor', overlayColor, callback);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundColor|background color} for this canvas\n * @param {(String|fabric.Pattern)} backgroundColor Color or pattern to set background color to\n * @param {Function} callback Callback to invoke when background color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/hXzvk/|jsFiddle demo}\n * @example Normal backgroundColor - color value\n * canvas.setBackgroundColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor with repeat and offset\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setBackgroundColor: function(backgroundColor, callback) {\n return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback);\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage}\n * or {@link fabric.StaticCanvas#overlayImage|overlayImage})\n * @param {(fabric.Image|String|null)} image fabric.Image instance, URL of an image or null to set background or overlay to\n * @param {Function} callback Callback to invoke when image is loaded and set as background or overlay. The first argument is the created image, the second argument is a flag indicating whether an error occurred or not.\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|image}.\n */\n __setBgOverlayImage: function(property, image, callback, options) {\n if (typeof image === 'string') {\n fabric.util.loadImage(image, function(img, isError) {\n if (img) {\n var instance = new fabric.Image(img, options);\n this[property] = instance;\n instance.canvas = this;\n }\n callback && callback(img, isError);\n }, this, options && options.crossOrigin);\n }\n else {\n options && image.setOptions(options);\n this[property] = image;\n image && (image.canvas = this);\n callback && callback(image, false);\n }\n\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundColor|backgroundColor}\n * or {@link fabric.StaticCanvas#overlayColor|overlayColor})\n * @param {(Object|String|null)} color Object with pattern information, color value or null\n * @param {Function} [callback] Callback is invoked when color is set\n */\n __setBgOverlayColor: function(property, color, callback) {\n this[property] = color;\n this._initGradient(color, property);\n this._initPattern(color, property, callback);\n return this;\n },\n\n /**\n * @private\n */\n _createCanvasElement: function() {\n var element = createCanvasElement();\n if (!element) {\n throw CANVAS_INIT_ERROR;\n }\n if (!element.style) {\n element.style = { };\n }\n if (typeof element.getContext === 'undefined') {\n throw CANVAS_INIT_ERROR;\n }\n return element;\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initOptions: function (options) {\n var lowerCanvasEl = this.lowerCanvasEl;\n this._setOptions(options);\n\n this.width = this.width || parseInt(lowerCanvasEl.width, 10) || 0;\n this.height = this.height || parseInt(lowerCanvasEl.height, 10) || 0;\n\n if (!this.lowerCanvasEl.style) {\n return;\n }\n\n lowerCanvasEl.width = this.width;\n lowerCanvasEl.height = this.height;\n\n lowerCanvasEl.style.width = this.width + 'px';\n lowerCanvasEl.style.height = this.height + 'px';\n\n this.viewportTransform = this.viewportTransform.slice();\n },\n\n /**\n * Creates a bottom canvas\n * @private\n * @param {HTMLElement} [canvasEl]\n */\n _createLowerCanvas: function (canvasEl) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n if (canvasEl && canvasEl.getContext) {\n this.lowerCanvasEl = canvasEl;\n }\n else {\n this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement();\n }\n\n fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas');\n this._originalCanvasStyle = this.lowerCanvasEl.style;\n if (this.interactive) {\n this._applyCanvasStyle(this.lowerCanvasEl);\n }\n\n this.contextContainer = this.lowerCanvasEl.getContext('2d');\n },\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth: function () {\n return this.width;\n },\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight: function () {\n return this.height;\n },\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setWidth: function (value, options) {\n return this.setDimensions({ width: value }, options);\n },\n\n /**\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setHeight: function (value, options) {\n return this.setDimensions({ height: value }, options);\n },\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setDimensions: function (dimensions, options) {\n var cssValue;\n\n options = options || {};\n\n for (var prop in dimensions) {\n cssValue = dimensions[prop];\n\n if (!options.cssOnly) {\n this._setBackstoreDimension(prop, dimensions[prop]);\n cssValue += 'px';\n this.hasLostContext = true;\n }\n\n if (!options.backstoreOnly) {\n this._setCssDimension(prop, cssValue);\n }\n }\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n this._initRetinaScaling();\n this.calcOffset();\n\n if (!options.cssOnly) {\n this.requestRenderAll();\n }\n\n return this;\n },\n\n /**\n * Helper for setting width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {Number} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setBackstoreDimension: function (prop, value) {\n this.lowerCanvasEl[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl[prop] = value;\n }\n\n if (this.cacheCanvasEl) {\n this.cacheCanvasEl[prop] = value;\n }\n\n this[prop] = value;\n\n return this;\n },\n\n /**\n * Helper for setting css width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {String} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setCssDimension: function (prop, value) {\n this.lowerCanvasEl.style[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl.style[prop] = value;\n }\n\n if (this.wrapperEl) {\n this.wrapperEl.style[prop] = value;\n }\n\n return this;\n },\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom: function () {\n return this.viewportTransform[0];\n },\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setViewportTransform: function (vpt) {\n var activeObject = this._activeObject,\n backgroundObject = this.backgroundImage,\n overlayObject = this.overlayImage,\n object, i, len;\n this.viewportTransform = vpt;\n for (i = 0, len = this._objects.length; i < len; i++) {\n object = this._objects[i];\n object.group || object.setCoords(true);\n }\n if (activeObject) {\n activeObject.setCoords();\n }\n if (backgroundObject) {\n backgroundObject.setCoords(true);\n }\n if (overlayObject) {\n overlayObject.setCoords(true);\n }\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {fabric.Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n zoomToPoint: function (point, value) {\n // TODO: just change the scale, preserve other transformations\n var before = point, vpt = this.viewportTransform.slice(0);\n point = transformPoint(point, invertTransform(this.viewportTransform));\n vpt[0] = value;\n vpt[3] = value;\n var after = transformPoint(point, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setZoom: function (value) {\n this.zoomToPoint(new fabric.Point(0, 0), value);\n return this;\n },\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {fabric.Point} point to move to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n absolutePan: function (point) {\n var vpt = this.viewportTransform.slice(0);\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Pans viewpoint relatively\n * @param {fabric.Point} point (position vector) to move by\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n relativePan: function (point) {\n return this.absolutePan(new fabric.Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5]\n ));\n },\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement: function () {\n return this.lowerCanvasEl;\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was added\n */\n _onObjectAdded: function(obj) {\n this.stateful && obj.setupState();\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added');\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n this.fire('object:removed', { target: obj });\n obj.fire('removed');\n delete obj.canvas;\n },\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clearContext: function(ctx) {\n ctx.clearRect(0, 0, this.width, this.height);\n return this;\n },\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext: function () {\n return this.contextContainer;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n this.remove.apply(this, this.getObjects());\n this.backgroundImage = null;\n this.overlayImage = null;\n this.backgroundColor = '';\n this.overlayColor = '';\n if (this._hasITextHandlers) {\n this.off('mouse:up', this._mouseUpITextHandler);\n this._iTextInstances = null;\n this._hasITextHandlers = false;\n }\n this.clearContext(this.contextContainer);\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Renders the canvas\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._objects);\n return this;\n },\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAndReset: function() {\n this.isRendering = 0;\n this.renderAll();\n },\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n requestRenderAll: function () {\n if (!this.isRendering) {\n this.isRendering = fabric.util.requestAnimFrame(this.renderAndResetBound);\n }\n return this;\n },\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport using\n * object absolute coordinates ( aCoords )\n * @return {Object} points.tl\n * @chainable\n */\n calcViewportBoundaries: function() {\n var points = { }, width = this.width, height = this.height,\n iVpt = invertTransform(this.viewportTransform);\n points.tl = transformPoint({ x: 0, y: 0 }, iVpt);\n points.br = transformPoint({ x: width, y: height }, iVpt);\n points.tr = new fabric.Point(points.br.x, points.tl.y);\n points.bl = new fabric.Point(points.tl.x, points.br.y);\n this.vptCoords = points;\n return points;\n },\n\n cancelRequestedRender: function() {\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n },\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderCanvas: function(ctx, objects) {\n var v = this.viewportTransform, path = this.clipPath;\n this.cancelRequestedRender();\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n fabric.util.setImageSmoothing(ctx, this.imageSmoothingEnabled);\n this.fire('before:render', { ctx: ctx, });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n if (path) {\n path.canvas = this;\n // needed to setup a couple of variables\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx: ctx, });\n },\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas: function(ctx) {\n var v = this.viewportTransform, path = this.clipPath;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects: function(ctx, objects) {\n var i, len;\n for (i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay: function(ctx, property) {\n var fill = this[property + 'Color'], object = this[property + 'Image'],\n v = this.viewportTransform, needsVpt = this[property + 'Vpt'];\n if (!fill && !object) {\n return;\n }\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = fill.toLive\n ? fill.toLive(ctx, this)\n : fill;\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n var m = fill.gradientTransform || fill.patternTransform;\n m && ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n object.render(ctx);\n ctx.restore();\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n },\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter: function () {\n return {\n top: this.height / 2,\n left: this.width / 2\n };\n },\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {fabric.Point} \n */\n getCenterPoint: function () {\n return new fabric.Point(this.width / 2, this.height / 2);\n },\n\n /**\n * Centers object horizontally in the canvas\n * @param {fabric.Object} object Object to center horizontally\n * @return {fabric.Canvas} thisArg\n */\n centerObjectH: function (object) {\n return this._centerObject(object, new fabric.Point(this.getCenterPoint().x, object.getCenterPoint().y));\n },\n\n /**\n * Centers object vertically in the canvas\n * @param {fabric.Object} object Object to center vertically\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObjectV: function (object) {\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, this.getCenterPoint().y));\n },\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObject: function(object) {\n var center = this.getCenterPoint();\n return this._centerObject(object, center);\n },\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObject: function(object) {\n var vpCenter = this.getVpCenter();\n return this._centerObject(object, vpCenter);\n },\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectH: function(object) {\n var vpCenter = this.getVpCenter();\n this._centerObject(object, new fabric.Point(vpCenter.x, object.getCenterPoint().y));\n return this;\n },\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectV: function(object) {\n var vpCenter = this.getVpCenter();\n\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, vpCenter.y));\n },\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {fabric.Point} vpCenter, viewport center\n * @chainable\n */\n getVpCenter: function() {\n var center = this.getCenterPoint(),\n iVpt = invertTransform(this.viewportTransform);\n return transformPoint(center, iVpt);\n },\n\n /**\n * @private\n * @param {fabric.Object} object Object to center\n * @param {fabric.Point} center Center point\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n _centerObject: function(object, center) {\n object.setPositionByOrigin(center, 'center', 'center');\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON: function (propertiesToInclude) {\n return this.toDatalessObject(propertiesToInclude);\n },\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function (propertiesToInclude) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n },\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function (propertiesToInclude) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n },\n\n /**\n * @private\n */\n _toObjectMethod: function (methodName, propertiesToInclude) {\n\n var clipPath = this.clipPath, data = {\n version: fabric.version,\n objects: this._toObjects(methodName, propertiesToInclude),\n };\n if (clipPath && !clipPath.excludeFromExport) {\n data.clipPath = this._toObject(this.clipPath, methodName, propertiesToInclude);\n }\n extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));\n\n fabric.util.populateWithProperties(this, data, propertiesToInclude);\n\n return data;\n },\n\n /**\n * @private\n */\n _toObjects: function(methodName, propertiesToInclude) {\n return this._objects.filter(function(object) {\n return !object.excludeFromExport;\n }).map(function(instance) {\n return this._toObject(instance, methodName, propertiesToInclude);\n }, this);\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n var originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n var object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = originalValue;\n }\n return object;\n },\n\n /**\n * @private\n */\n __serializeBgOverlay: function(methodName, propertiesToInclude) {\n var data = {}, bgImage = this.backgroundImage, overlayImage = this.overlayImage,\n bgColor = this.backgroundColor, overlayColor = this.overlayColor;\n\n if (bgColor && bgColor.toObject) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n }\n else if (bgColor) {\n data.background = bgColor;\n }\n\n if (overlayColor && overlayColor.toObject) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n }\n else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(bgImage, methodName, propertiesToInclude);\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(overlayImage, methodName, propertiesToInclude);\n }\n\n return data;\n },\n\n /* _TO_SVG_START_ */\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: true,\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG: function(options, reviver) {\n options || (options = { });\n options.reviver = reviver;\n var markup = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n },\n\n /**\n * @private\n */\n _setSVGPreamble: function(markup, options) {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n'\n );\n },\n\n /**\n * @private\n */\n _setSVGHeader: function(markup, options) {\n var width = options.width || this.width,\n height = options.height || this.height,\n vpt, viewBox = 'viewBox=\"0 0 ' + this.width + ' ' + this.height + '\" ',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n if (options.viewBox) {\n viewBox = 'viewBox=\"' +\n options.viewBox.x + ' ' +\n options.viewBox.y + ' ' +\n options.viewBox.width + ' ' +\n options.viewBox.height + '\" ';\n }\n else {\n if (this.svgViewportTransformation) {\n vpt = this.viewportTransform;\n viewBox = 'viewBox=\"' +\n toFixed(-vpt[4] / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(this.width / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS) + '\" ';\n }\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ', fabric.version, '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n'\n );\n },\n\n createSVGClipPathMarkup: function(options) {\n var clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n return '\\n' +\n this.clipPath.toClipPathSVG(options.reviver) +\n '\\n';\n }\n return '';\n },\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup: function() {\n var _this = this,\n markup = ['background', 'overlay'].map(function(prop) {\n var fill = _this[prop + 'Color'];\n if (fill && fill.toLive) {\n var shouldTransform = _this[prop + 'Vpt'], vpt = _this.viewportTransform,\n object = {\n width: _this.width / (shouldTransform ? vpt[0] : 1),\n height: _this.height / (shouldTransform ? vpt[3] : 1)\n };\n return fill.toSVG(\n object,\n { additionalTransform: shouldTransform ? fabric.util.matrixToSVG(vpt) : '' }\n );\n }\n });\n return markup.join('');\n },\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup: function() {\n var markup = '', fontList = { }, obj, fontFamily,\n style, row, rowIndex, _char, charIndex, i, len,\n fontPaths = fabric.fontPaths, objects = [];\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (object._objects) {\n object._objects.forEach(add);\n }\n });\n\n for (i = 0, len = objects.length; i < len; i++) {\n obj = objects[i];\n fontFamily = obj.fontFamily;\n if (obj.type.indexOf('text') === -1 || fontList[fontFamily] || !fontPaths[fontFamily]) {\n continue;\n }\n fontList[fontFamily] = true;\n if (!obj.styles) {\n continue;\n }\n style = obj.styles;\n for (rowIndex in style) {\n row = style[rowIndex];\n for (charIndex in row) {\n _char = row[charIndex];\n fontFamily = _char.fontFamily;\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n }\n }\n }\n\n for (var j in fontList) {\n markup += [\n '\\t\\t@font-face {\\n',\n '\\t\\t\\tfont-family: \\'', j, '\\';\\n',\n '\\t\\t\\tsrc: url(\\'', fontPaths[j], '\\');\\n',\n '\\t\\t}\\n'\n ].join('');\n }\n\n if (markup) {\n markup = [\n '\\t\\n'\n ].join('');\n }\n\n return markup;\n },\n\n /**\n * @private\n */\n _setSVGObjects: function(markup, reviver) {\n var instance, i, len, objects = this._objects;\n for (i = 0, len = objects.length; i < len; i++) {\n instance = objects[i];\n if (instance.excludeFromExport) {\n continue;\n }\n this._setSVGObject(markup, instance, reviver);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n markup.push(instance.toSVG(reviver));\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayImage: function(markup, property, reviver) {\n if (this[property] && !this[property].excludeFromExport && this[property].toSVG) {\n markup.push(this[property].toSVG(reviver));\n }\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayColor: function(markup, property) {\n var filler = this[property + 'Color'], vpt = this.viewportTransform, finalWidth = this.width,\n finalHeight = this.height;\n if (!filler) {\n return;\n }\n if (filler.toLive) {\n var repeat = filler.repeat, iVpt = fabric.util.invertTransform(vpt), shouldInvert = this[property + 'Vpt'],\n additionalTransform = shouldInvert ? fabric.util.matrixToSVG(iVpt) : '';\n markup.push(\n '\\n'\n );\n }\n else {\n markup.push(\n '\\n'\n );\n }\n },\n /* _TO_SVG_END_ */\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendToBack: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.unshift(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringToFront: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.push(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.push(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendBackwards: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx > 0 + objsMoved) {\n newIdx = idx - 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewLowerIndex: function(object, idx, intersecting) {\n var newIdx, i;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse down the stack looking for the nearest intersecting object\n for (i = idx - 1; i >= 0; --i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringForward: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx < this._objects.length - 1 - objsMoved) {\n newIdx = idx + 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewUpperIndex: function(object, idx, intersecting) {\n var newIdx, i, len;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse up the stack looking for the nearest intersecting object\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {Number} index Position to move to\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n moveTo: function (object, index) {\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n return this.renderOnAddRemove && this.requestRenderAll();\n },\n\n /**\n * Clears a canvas element and dispose objects\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n // cancel eventually ongoing renders\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n this.forEachObject(function(object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n if (this.backgroundImage && this.backgroundImage.dispose) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = null;\n if (this.overlayImage && this.overlayImage.dispose) {\n this.overlayImage.dispose();\n }\n this.overlayImage = null;\n this._iTextInstances = null;\n this.contextContainer = null;\n // restore canvas style\n this.lowerCanvasEl.classList.remove('lower-canvas');\n fabric.util.setStyle(this.lowerCanvasEl, this._originalCanvasStyle);\n delete this._originalCanvasStyle;\n // restore canvas size to original size in case retina scaling was applied\n this.lowerCanvasEl.setAttribute('width', this.width);\n this.lowerCanvasEl.setAttribute('height', this.height);\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n this.lowerCanvasEl = undefined;\n return this;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function () {\n return '#';\n }\n });\n\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n\n extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\n\n /**\n * @static\n * @type String\n * @default\n */\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n /**\n * Provides a way to check support of some of the canvas methods\n * (either those of HTMLCanvasElement itself, or rendering context)\n *\n * @param {String} methodName Method to check support for;\n * Could be one of \"setLineDash\"\n * @return {Boolean | null} `true` if method is supported (or at least exists),\n * `null` if canvas element or context can not be initialized\n */\n supports: function (methodName) {\n var el = createCanvasElement();\n\n if (!el || !el.getContext) {\n return null;\n }\n\n var ctx = el.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n switch (methodName) {\n\n case 'setLineDash':\n return typeof ctx.setLineDash !== 'undefined';\n\n default:\n return null;\n }\n }\n });\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @function\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * canvas.includeDefaultValues = false;\n * var json = canvas.toJSON();\n */\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n if (fabric.isLikelyNode) {\n fabric.StaticCanvas.prototype.createPNGStream = function() {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createPNGStream();\n };\n fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createJPEGStream(opts);\n };\n }\n})();\n\n\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\n\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color: 'rgb(0, 0, 0)',\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width: 1,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'round',\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'round',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit: 10,\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: null,\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize: false,\n\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles: function (ctx) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n },\n\n /**\n * Sets the transformation on given context\n * @param {RenderingContext2d} ctx context to render on\n * @private\n */\n _saveAndTransform: function(ctx) {\n var v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n },\n\n /**\n * Sets brush shadow styles\n * @private\n */\n _setShadow: function() {\n if (!this.shadow) {\n return;\n }\n\n var canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom();\n if (canvas && canvas._isRetinaScaling()) {\n zoom *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n },\n\n needsFullRender: function() {\n var color = new fabric.Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n },\n\n /**\n * Removes brush shadow styles\n * @private\n */\n _resetShadow: function() {\n var ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n _isOutSideCanvas: function(pointer) {\n return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight();\n }\n});\n\n\n(function() {\n /**\n * PencilBrush class\n * @class fabric.PencilBrush\n * @extends fabric.BaseBrush\n */\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\n\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate: 0.4,\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine: false,\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {'altKey' | 'shiftKey' | 'ctrlKey' | 'none' | undefined | null}\n */\n straightLineKey: 'shiftKey',\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.PencilBrush} Instance of a pencil brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this._points = [];\n },\n\n needsFullRender: function () {\n return this.callSuper('needsFullRender') || this._hasStraightLine;\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n _drawSegment: function (ctx, p1, p2) {\n var midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this.drawStraightLine = options.e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._captureDrawingPath(pointer);\n this._render();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this.drawStraightLine = options.e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n }\n else {\n var points = this._points, length = points.length, ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n ctx.stroke();\n ctx.restore();\n }\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function(options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing: function(pointer) {\n\n var p = new fabric.Point(pointer.x, pointer.y);\n\n this._reset();\n this._addPoint(p);\n this.canvas.contextTop.moveTo(p.x, p.y);\n },\n\n /**\n * @private\n * @param {fabric.Point} point Point to be added to points array\n */\n _addPoint: function(point) {\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n },\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset: function() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _captureDrawingPath: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n return this._addPoint(pointerPoint);\n },\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render: function(ctx) {\n var i, len,\n p1 = this._points[0],\n p2 = this._points[1];\n ctx = ctx || this.canvas.contextTop;\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n var width = this.width / 1000;\n p1 = new fabric.Point(p1.x, p1.y);\n p2 = new fabric.Point(p2.x, p2.y);\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (i = 1, len = this._points.length; i < len; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n this._drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * Converts points to SVG path\n * @param {Array} points Array of points\n * @return {(string|number)[][]} SVG path commands\n */\n convertPointsToSVGPath: function (points) {\n var correction = this.width / 1000;\n return fabric.util.getSmoothPathFromPoints(points, correction);\n },\n\n /**\n * @private\n * @param {(string|number)[][]} pathData SVG path commands\n * @returns {boolean}\n */\n _isEmptySVGPath: function (pathData) {\n var pathString = fabric.util.joinPath(pathData);\n return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';\n },\n\n /**\n * Creates fabric.Path object to add on canvas\n * @param {(string|number)[][]} pathData Path data\n * @return {fabric.Path} Path to add on canvas\n */\n createPath: function(pathData) {\n var path = new fabric.Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new fabric.Shadow(this.shadow);\n }\n\n return path;\n },\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints: function(points, distance) {\n if (points.length <= 2) {\n return points;\n }\n var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\n i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\n cDistance;\n for (i = 1; i < l - 1; i++) {\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n /**\n * Add the last point from the original line to the end of the array.\n * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n */\n newPoints.push(points[l]);\n return newPoints;\n },\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new fabric path object\n * and add it to the fabric canvas.\n */\n _finalizeAndAddPath: function() {\n var ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n var pathData = this.convertPointsToSVGPath(this._points);\n if (this._isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n var path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n });\n})();\n\n\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\n\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.CircleBrush} Instance of a circle brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n drawDot: function(pointer) {\n var point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n },\n\n dot: function(ctx, point) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n },\n\n /**\n * Invoked on mouse down\n */\n onMouseDown: function(pointer) {\n this.points.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n },\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n points = this.points;\n this._saveAndTransform(ctx);\n for (i = 0, len = points.length; i < len; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n }\n else {\n this.drawDot(pointer);\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\n this.canvas.renderOnAddRemove = false;\n\n var circles = [];\n\n for (i = 0, len = this.points.length; i < len; i++) {\n var point = this.points[i],\n circle = new fabric.Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: point.fill\n });\n\n this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));\n\n circles.push(circle);\n }\n var group = new fabric.Group(circles);\n group.canvas = this.canvas;\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @param {Object} pointer\n * @return {fabric.Point} Just added pointer point\n */\n addPoint: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n\n circleRadius = fabric.util.getRandomInt(\n Math.max(0, this.width - 20), this.width + 20) / 2,\n\n circleColor = new fabric.Color(this.color)\n .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\n .toRgba();\n\n pointerPoint.radius = circleRadius;\n pointerPoint.fill = circleColor;\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n});\n\n\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\n\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density: 20,\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth: 1,\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance: 1,\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity: false,\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping: true,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.SprayBrush} Instance of a spray brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.sprayChunks = [];\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer) {\n this.sprayChunks.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n var rects = [];\n\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n var sprayChunk = this.sprayChunks[i];\n\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n\n var rect = new fabric.Rect({\n width: sprayChunk[j].width,\n height: sprayChunk[j].width,\n left: sprayChunk[j].x + 1,\n top: sprayChunk[j].y + 1,\n originX: 'center',\n originY: 'center',\n fill: this.color\n });\n rects.push(rect);\n }\n }\n\n if (this.optimizeOverlapping) {\n rects = this._getOptimizedRects(rects);\n }\n\n var group = new fabric.Group(rects);\n this.shadow && group.set('shadow', new fabric.Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @private\n * @param {Array} rects\n */\n _getOptimizedRects: function(rects) {\n\n // avoid creating duplicate rects at the same coordinates\n var uniqueRects = { }, key, i, len;\n\n for (i = 0, len = rects.length; i < len; i++) {\n key = rects[i].left + '' + rects[i].top;\n if (!uniqueRects[key]) {\n uniqueRects[key] = rects[i];\n }\n }\n var uniqueRectsArray = [];\n for (key in uniqueRects) {\n uniqueRectsArray.push(uniqueRects[key]);\n }\n\n return uniqueRectsArray;\n },\n\n /**\n * Render new chunk of spray brush\n */\n render: function(sprayChunk) {\n var ctx = this.canvas.contextTop, i, len;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = sprayChunk.length; i < len; i++) {\n var point = sprayChunk[i];\n if (typeof point.opacity !== 'undefined') {\n ctx.globalAlpha = point.opacity;\n }\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n ctx.restore();\n },\n\n /**\n * Render all spray chunks\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, ilen;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n this.render(this.sprayChunks[i]);\n }\n ctx.restore();\n },\n\n /**\n * @param {Object} pointer\n */\n addSprayChunk: function(pointer) {\n this.sprayChunkPoints = [];\n\n var x, y, width, radius = this.width / 2, i;\n\n for (i = 0; i < this.density; i++) {\n\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n if (this.dotWidthVariance) {\n width = fabric.util.getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance);\n }\n else {\n width = this.dotWidth;\n }\n\n var point = new fabric.Point(x, y);\n point.width = width;\n\n if (this.randomOpacity) {\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n }\n\n this.sprayChunkPoints.push(point);\n }\n\n this.sprayChunks.push(this.sprayChunkPoints);\n }\n});\n\n\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\n\n getPatternSrc: function() {\n\n var dotWidth = 20,\n dotDistance = 5,\n patternCanvas = fabric.util.createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n patternCtx.closePath();\n patternCtx.fill();\n\n return patternCanvas;\n },\n\n getPatternSrcFunction: function() {\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n },\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern: function(ctx) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n },\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles: function(ctx) {\n this.callSuper('_setBrushStyles', ctx);\n ctx.strokeStyle = this.getPattern(ctx);\n },\n\n /**\n * Creates path\n */\n createPath: function(pathData) {\n var path = this.callSuper('createPath', pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new fabric.Pattern({\n source: this.source || this.getPatternSrcFunction(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y\n });\n return path;\n }\n});\n\n\n(function() {\n\n var getPointer = fabric.util.getPointer,\n degreesToRadians = fabric.util.degreesToRadians,\n isTouchEvent = fabric.util.isTouchEvent;\n\n /**\n * Canvas class\n * @class fabric.Canvas\n * @extends fabric.StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n * @see {@link fabric.Canvas#initialize} for constructor definition\n *\n * @fires object:modified at the end of a transform or any change when statefull is true\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop:before before drop event. same native event. This is added to handle edge cases\n * @fires drop\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n */\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n this._initInteractive();\n this._createCacheCanvas();\n },\n\n /**\n * When true, objects can be transformed by one side (unproportionally)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: true,\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type String\n * @default\n */\n uniScaleKey: 'shiftKey',\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: false,\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n centeredKey: 'altKey',\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n altActionKey: 'shiftKey',\n\n /**\n * Indicates that canvas is interactive. This property should not be changed.\n * @type Boolean\n * @default\n */\n interactive: true,\n\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: true,\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type String|Array\n * @default\n */\n selectionKey: 'shiftKey',\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|String\n * @default\n */\n altSelectionKey: null,\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(100, 100, 255, 0.3)', // blue\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: [],\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: 1,\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: false,\n\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type String\n * @default\n */\n hoverCursor: 'move',\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type String\n * @default\n */\n moveCursor: 'move',\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default\n */\n defaultCursor: 'default',\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default\n */\n freeDrawingCursor: 'crosshair',\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default\n */\n notAllowedCursor: 'not-allowed',\n\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n */\n containerClass: 'canvas-container',\n\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: 0,\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: false,\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n isDrawingMode: false,\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: false,\n\n /**\n * Indicates the angle that an object will lock to while rotating.\n * @type Number\n * @since 1.6.7\n * @default\n */\n snapAngle: 0,\n\n /**\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n * When `null`, the snapThreshold will default to the snapAngle.\n * @type null|Number\n * @since 1.6.7\n * @default\n */\n snapThreshold: null,\n\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: false,\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: false,\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: false,\n\n /**\n * Keep track of the subTargets for Mouse Events\n * @type fabric.Object[]\n */\n targets: [],\n\n /**\n * When the option is enabled, PointerEvent is used instead of MouseEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: false,\n\n /**\n * Keep track of the hovered target\n * @type fabric.Object\n * @private\n */\n _hoveredTarget: null,\n\n /**\n * hold the list of nested targets hovered\n * @type fabric.Object[]\n * @private\n */\n _hoveredTargets: [],\n\n /**\n * @private\n */\n _initInteractive: function() {\n this._currentTransform = null;\n this._groupSelector = null;\n this._initWrapperElement();\n this._createUpperCanvas();\n this._initEventListeners();\n\n this._initRetinaScaling();\n\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n\n this.calcOffset();\n },\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender: function() {\n var activeObjects = this.getActiveObjects(),\n object, objsToRender, activeGroupObjects;\n\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n objsToRender = [];\n activeGroupObjects = [];\n for (var i = 0, length = this._objects.length; i < length; i++) {\n object = this._objects[i];\n if (activeObjects.indexOf(object) === -1 ) {\n objsToRender.push(object);\n }\n else {\n activeGroupObjects.push(object);\n }\n }\n if (activeObjects.length > 1) {\n this._activeObject._objects = activeGroupObjects;\n }\n objsToRender.push.apply(objsToRender, activeGroupObjects);\n }\n else {\n objsToRender = this._objects;\n }\n return objsToRender;\n },\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n return this;\n },\n\n renderTopLayer: function(ctx) {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n },\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n renderTop: function () {\n var ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n this.fire('after:render');\n return this;\n },\n\n /**\n * @private\n */\n _normalizePointer: function (object, pointer) {\n var m = object.calcTransformMatrix(),\n invertedM = fabric.util.invertTransform(m),\n vptPointer = this.restorePointerVpt(pointer);\n return fabric.util.transformPoint(vptPointer, invertedM);\n },\n\n /**\n * Returns true if object is transparent at a certain location\n * @param {fabric.Object} target Object to check\n * @param {Number} x Left coordinate\n * @param {Number} y Top coordinate\n * @return {Boolean}\n */\n isTargetTransparent: function (target, x, y) {\n // in case the target is the activeObject, we cannot execute this optimization\n // because we need to draw controls too.\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\n targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\n targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\n\n var isTransparent = fabric.util.isTransparent(\n target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n\n return isTransparent;\n }\n\n var ctx = this.contextCache,\n originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\n\n target.selectionBackgroundColor = '';\n\n this.clearContext(ctx);\n\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n target.render(ctx);\n ctx.restore();\n\n target.selectionBackgroundColor = originalColor;\n\n var isTransparent = fabric.util.isTransparent(\n ctx, x, y, this.targetFindTolerance);\n\n return isTransparent;\n },\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {Event} e Event object\n */\n _isSelectionKeyPressed: function(e) {\n var selectionKeyPressed = false;\n\n if (Array.isArray(this.selectionKey)) {\n selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\n }\n else {\n selectionKeyPressed = e[this.selectionKey];\n }\n\n return selectionKeyPressed;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _shouldClearSelection: function (e, target) {\n var activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return (\n !target\n ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e))\n ||\n (target && !target.evented)\n ||\n (target &&\n !target.selectable &&\n activeObject &&\n activeObject !== target)\n );\n },\n\n /**\n * centeredScaling from object can't override centeredScaling from canvas.\n * this should be fixed, since object setting should take precedence over canvas.\n * also this should be something that will be migrated in the control properties.\n * as ability to define the origin of the transformation that the control provide.\n * @private\n * @param {fabric.Object} target\n * @param {String} action\n * @param {Boolean} altKey\n */\n _shouldCenterTransform: function (target, action, altKey) {\n if (!target) {\n return;\n }\n\n var centerTransform;\n\n if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {\n centerTransform = this.centeredScaling || target.centeredScaling;\n }\n else if (action === 'rotate') {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !altKey : altKey;\n },\n\n /**\n * should disappear before release 4.0\n * @private\n */\n _getOriginFromCorner: function(target, corner) {\n var origin = {\n x: target.originX,\n y: target.originY\n };\n\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n origin.x = 'right';\n }\n else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n origin.x = 'left';\n }\n\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n origin.y = 'bottom';\n }\n else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n origin.y = 'top';\n }\n return origin;\n },\n\n /**\n * @private\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\n */\n _getActionFromCorner: function(alreadySelected, corner, e, target) {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n var control = target.controls[corner];\n return control.getActionName(e, control, target);\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _setupCurrentTransform: function (e, target, alreadySelected) {\n if (!target) {\n return;\n }\n\n var pointer = this.getPointer(e), corner = target.__corner,\n control = target.controls[corner],\n actionHandler = (alreadySelected && corner) ?\n control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\n origin = this._getOriginFromCorner(target, corner),\n altKey = e[this.centeredKey],\n transform = {\n target: target,\n action: action,\n actionHandler: actionHandler,\n corner: corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n // used by transation\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n // unsure they are useful anymore.\n // left: target.left,\n // top: target.top,\n theta: degreesToRadians(target.angle),\n // end of unsure\n width: target.width * target.scaleX,\n shiftKey: e.shiftKey,\n altKey: altKey,\n original: fabric.util.saveObjectTransform(target),\n };\n\n if (this._shouldCenterTransform(target, action, altKey)) {\n transform.originX = 'center';\n transform.originY = 'center';\n }\n transform.original.originX = origin.x;\n transform.original.originY = origin.y;\n this._currentTransform = transform;\n this._beforeTransform(e);\n },\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor: function (value) {\n this.upperCanvasEl.style.cursor = value;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection: function (ctx) {\n var selector = this._groupSelector,\n viewportStart = new fabric.Point(selector.ex, selector.ey),\n start = fabric.util.transformPoint(viewportStart, this.viewportTransform),\n viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),\n extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),\n minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y),\n strokeOffset = this.selectionLineWidth / 2;\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n },\n\n /**\n * Method that determines what object we are clicking on\n * the skipGroup parameter is for internal use, is needed for shift+click action\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n * @return {fabric.Object} the target found\n */\n findTarget: function (e, skipGroup) {\n if (this.skipTargetFind) {\n return;\n }\n\n var ignoreZoom = true,\n pointer = this.getPointer(e, ignoreZoom),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects(),\n activeTarget, activeTargetSubs,\n isTouch = isTouchEvent(e),\n shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;\n\n // first check current group (if one exists)\n // active group does not check sub targets like normal groups.\n // if active group just exits.\n this.targets = [];\n\n // if we hit the corner of an activeObject, let's return that.\n if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {\n return activeObject;\n }\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n return activeObject;\n }\n if (aObjects.length === 1 &&\n activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n if (!this.preserveObjectStacking) {\n return activeObject;\n }\n else {\n activeTarget = activeObject;\n activeTargetSubs = this.targets;\n this.targets = [];\n }\n }\n var target = this._searchPossibleTargets(this._objects, pointer);\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n target = activeTarget;\n this.targets = activeTargetSubs;\n }\n return target;\n },\n\n /**\n * Checks point is inside the object.\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @param {fabric.Object} obj Object to test against\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget: function(pointer, obj, globalPointer) {\n if (obj &&\n obj.visible &&\n obj.evented &&\n // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n obj.containsPoint(pointer)\n ) {\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n if (!isTransparent) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n },\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {fabric.Object} object that contains pointer\n * @private\n */\n _searchPossibleTargets: function(objects, pointer) {\n // Cache all targets where their bounding box contains point.\n var target, i = objects.length, subTarget;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n var objToCheck = objects[i];\n var pointerToUse = objToCheck.group ?\n this._normalizePointer(objToCheck.group, pointer) : pointer;\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n target = objects[i];\n if (target.subTargetCheck && target instanceof fabric.Group) {\n subTarget = this._searchPossibleTargets(target._objects, pointer);\n subTarget && this.targets.push(subTarget);\n }\n break;\n }\n }\n return target;\n },\n\n /**\n * Returns pointer coordinates without the effect of the viewport\n * @param {Object} pointer with \"x\" and \"y\" number values\n * @return {Object} object with \"x\" and \"y\" number values\n */\n restorePointerVpt: function(pointer) {\n return fabric.util.transformPoint(\n pointer,\n fabric.util.invertTransform(this.viewportTransform)\n );\n },\n\n /**\n * Returns pointer coordinates relative to canvas.\n * Can return coordinates with or without viewportTransform.\n * ignoreZoom false gives back coordinates that represent\n * the point clicked on canvas element.\n * ignoreZoom true gives back coordinates after being processed\n * by the viewportTransform ( sort of coordinates of what is displayed\n * on the canvas where you are clicking.\n * ignoreZoom true = HTMLElement coordinates relative to top,left\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n * To interact with your shapes top and left you want to use ignoreZoom true\n * most of the time, while ignoreZoom false will give you coordinates\n * compatible with the object.oCoords system.\n * of the time.\n * @param {Event} e\n * @param {Boolean} ignoreZoom\n * @return {Object} object with \"x\" and \"y\" number values\n */\n getPointer: function (e, ignoreZoom) {\n // return cached values if we are in the event processing chain\n if (this._absolutePointer && !ignoreZoom) {\n return this._absolutePointer;\n }\n if (this._pointer && ignoreZoom) {\n return this._pointer;\n }\n\n var pointer = getPointer(e),\n upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect(),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0,\n cssScale;\n\n if (!boundsWidth || !boundsHeight ) {\n if ('top' in bounds && 'bottom' in bounds) {\n boundsHeight = Math.abs( bounds.top - bounds.bottom );\n }\n if ('right' in bounds && 'left' in bounds) {\n boundsWidth = Math.abs( bounds.right - bounds.left );\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!ignoreZoom) {\n pointer = this.restorePointerVpt(pointer);\n }\n\n var retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n if (boundsWidth === 0 || boundsHeight === 0) {\n // If bounds are not available (i.e. not visible), do not apply scale.\n cssScale = { width: 1, height: 1 };\n }\n else {\n cssScale = {\n width: upperCanvasEl.width / boundsWidth,\n height: upperCanvasEl.height / boundsHeight\n };\n }\n\n return {\n x: pointer.x * cssScale.width,\n y: pointer.y * cssScale.height\n };\n },\n\n /**\n * @private\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n */\n _createUpperCanvas: function () {\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\n\n // there is no need to create a new upperCanvas element if we have already one.\n if (upperCanvasEl) {\n upperCanvasEl.className = '';\n }\n else {\n upperCanvasEl = this._createCanvasElement();\n this.upperCanvasEl = upperCanvasEl;\n }\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n\n this.wrapperEl.appendChild(upperCanvasEl);\n\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n this._applyCanvasStyle(upperCanvasEl);\n this.contextTop = upperCanvasEl.getContext('2d');\n },\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext: function () {\n return this.contextTop;\n },\n\n /**\n * @private\n */\n _createCacheCanvas: function () {\n this.cacheCanvasEl = this._createCanvasElement();\n this.cacheCanvasEl.setAttribute('width', this.width);\n this.cacheCanvasEl.setAttribute('height', this.height);\n this.contextCache = this.cacheCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _initWrapperElement: function () {\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n 'class': this.containerClass\n });\n fabric.util.setStyle(this.wrapperEl, {\n width: this.width + 'px',\n height: this.height + 'px',\n position: 'relative'\n });\n fabric.util.makeElementUnselectable(this.wrapperEl);\n },\n\n /**\n * @private\n * @param {HTMLElement} element canvas element to apply styles on\n */\n _applyCanvasStyle: function (element) {\n var width = this.width || element.width,\n height = this.height || element.height;\n\n fabric.util.setStyle(element, {\n position: 'absolute',\n width: width + 'px',\n height: height + 'px',\n left: 0,\n top: 0,\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n });\n element.width = width;\n element.height = height;\n fabric.util.makeElementUnselectable(element);\n },\n\n /**\n * Copy the entire inline style from one element (fromEl) to another (toEl)\n * @private\n * @param {Element} fromEl Element style is copied from\n * @param {Element} toEl Element copied style is applied to\n */\n _copyCanvasStyle: function (fromEl, toEl) {\n toEl.style.cssText = fromEl.style.cssText;\n },\n\n /**\n * Returns context of canvas where object selection is drawn\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext: function() {\n return this.contextTop;\n },\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement: function () {\n return this.upperCanvasEl;\n },\n\n /**\n * Returns currently active object\n * @return {fabric.Object} active object\n */\n getActiveObject: function () {\n return this._activeObject;\n },\n\n /**\n * Returns an array with the current selected objects\n * @return {fabric.Object} active object\n */\n getActiveObjects: function () {\n var active = this._activeObject;\n if (active) {\n if (active.type === 'activeSelection' && active._objects) {\n return active._objects.slice(0);\n }\n else {\n return [active];\n }\n }\n return [];\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { target: obj });\n this._discardActiveObject();\n this.fire('selection:cleared', { target: obj });\n obj.fire('deselected');\n }\n if (obj === this._hoveredTarget){\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n this.callSuper('_onObjectRemoved', obj);\n },\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {fabric.Object} obj old activeObject\n */\n _fireSelectionEvents: function(oldObjects, e) {\n var somethingChanged = false, objects = this.getActiveObjects(),\n added = [], removed = [];\n oldObjects.forEach(function(oldObject) {\n if (objects.indexOf(oldObject) === -1) {\n somethingChanged = true;\n oldObject.fire('deselected', {\n e: e,\n target: oldObject\n });\n removed.push(oldObject);\n }\n });\n objects.forEach(function(object) {\n if (oldObjects.indexOf(object) === -1) {\n somethingChanged = true;\n object.fire('selected', {\n e: e,\n target: object\n });\n added.push(object);\n }\n });\n if (oldObjects.length > 0 && objects.length > 0) {\n somethingChanged && this.fire('selection:updated', {\n e: e,\n selected: added,\n deselected: removed,\n });\n }\n else if (objects.length > 0) {\n this.fire('selection:created', {\n e: e,\n selected: added,\n });\n }\n else if (oldObjects.length > 0) {\n this.fire('selection:cleared', {\n e: e,\n deselected: removed,\n });\n }\n },\n\n /**\n * Sets given object as the only active object on canvas\n * @param {fabric.Object} object Object to set as an active one\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setActiveObject: function (object, e) {\n var currentActives = this.getActiveObjects();\n this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @private\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the selection happened\n */\n _setActiveObject: function(object, e) {\n if (this._activeObject === object) {\n return false;\n }\n if (!this._discardActiveObject(e, object)) {\n return false;\n }\n if (object.onSelect({ e: e })) {\n return false;\n }\n this._activeObject = object;\n return true;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any events. There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object to set as active\n * @return {Boolean} true if the selection happened\n * @private\n */\n _discardActiveObject: function(e, object) {\n var obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e: e, object: object })) {\n return false;\n }\n this._activeObject = null;\n }\n return true;\n },\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n discardActiveObject: function (e) {\n var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', { target: activeObject, e: e });\n }\n this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * Clears a canvas element and removes all event listeners\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n var wrapper = this.wrapperEl;\n this.removeListeners();\n wrapper.removeChild(this.upperCanvasEl);\n wrapper.removeChild(this.lowerCanvasEl);\n this.contextCache = null;\n this.contextTop = null;\n ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n if (wrapper.parentNode) {\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n }\n delete this.wrapperEl;\n fabric.StaticCanvas.prototype.dispose.call(this);\n return this;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n // this.discardActiveGroup();\n this.discardActiveObject();\n this.clearContext(this.contextTop);\n return this.callSuper('clear');\n },\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls: function(ctx) {\n var activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n //If the object is part of the current selection group, it should\n //be transformed appropriately\n //i.e. it should be serialised as it would appear if the selection group\n //were to be destroyed.\n var originalProperties = this._realizeGroupTransformOnObject(instance),\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n this._unwindGroupTransformOnObject(instance, originalProperties);\n return object;\n },\n\n /**\n * Realises an object's group transformation on it\n * @private\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n _realizeGroupTransformOnObject: function(instance) {\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\n //Copy all the positionally relevant properties across now\n var originalValues = {};\n layoutProps.forEach(function(prop) {\n originalValues[prop] = instance[prop];\n });\n fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());\n return originalValues;\n }\n else {\n return null;\n }\n },\n\n /**\n * Restores the changed properties of instance\n * @private\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n */\n _unwindGroupTransformOnObject: function(instance, originalValues) {\n if (originalValues) {\n instance.set(originalValues);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n //If the object is in a selection group, simulate what would happen to that\n //object when the group is deselected\n var originalProperties = this._realizeGroupTransformOnObject(instance);\n this.callSuper('_setSVGObject', markup, instance, reviver);\n this._unwindGroupTransformOnObject(instance, originalProperties);\n },\n\n setViewportTransform: function (vpt) {\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n this._activeObject.clearContextTop();\n }\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n }\n });\n\n // copying static properties manually to work around Opera's bug,\n // where \"prototype\" property is enumerable and overrides existing prototype\n for (var prop in fabric.StaticCanvas) {\n if (prop !== 'prototype') {\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n }\n }\n})();\n\n\n(function() {\n\n var addListener = fabric.util.addListener,\n removeListener = fabric.util.removeListener,\n RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\n addEventOptions = { passive: false };\n\n function checkClick(e, value) {\n return e.button && (e.button === value - 1);\n }\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n mainTouchId: null,\n\n /**\n * Adds mouse listeners to canvas\n * @private\n */\n _initEventListeners: function () {\n // in case we initialized the class twice. This should not happen normally\n // but in some kind of applications where the canvas element may be changed\n // this is a workaround to having double listeners.\n this.removeListeners();\n this._bindEvents();\n this.addOrRemove(addListener, 'add');\n },\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n _getEventPrefix: function () {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n },\n\n addOrRemove: function(functor, eventjsFunctor) {\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(fabric.window, 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n }\n },\n\n /**\n * Removes all event listeners\n */\n removeListeners: function() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n */\n _bindEvents: function() {\n if (this.eventsBound) {\n // for any reason we pass here twice we do not want to bind events twice.\n return;\n }\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onTouchStart = this._onTouchStart.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onResize = this._onResize.bind(this);\n this._onGesture = this._onGesture.bind(this);\n this._onDrag = this._onDrag.bind(this);\n this._onShake = this._onShake.bind(this);\n this._onLongPress = this._onLongPress.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n this._onMouseWheel = this._onMouseWheel.bind(this);\n this._onMouseOut = this._onMouseOut.bind(this);\n this._onMouseEnter = this._onMouseEnter.bind(this);\n this._onContextMenu = this._onContextMenu.bind(this);\n this._onDoubleClick = this._onDoubleClick.bind(this);\n this._onDragOver = this._onDragOver.bind(this);\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n this._onDrop = this._onDrop.bind(this);\n this.eventsBound = true;\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js gesture\n * @param {Event} [self] Inner Event object\n */\n _onGesture: function(e, self) {\n this.__onTransformGesture && this.__onTransformGesture(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js drag\n * @param {Event} [self] Inner Event object\n */\n _onDrag: function(e, self) {\n this.__onDrag && this.__onDrag(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n _onMouseWheel: function(e) {\n this.__onMouseWheel(e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseOut: function(e) {\n var target = this._hoveredTarget;\n this.fire('mouse:out', { target: target, e: e });\n this._hoveredTarget = null;\n target && target.fire('mouseout', { e: e });\n\n var _this = this;\n this._hoveredTargets.forEach(function(_target){\n _this.fire('mouse:out', { target: target, e: e });\n _target && target.fire('mouseout', { e: e });\n });\n this._hoveredTargets = [];\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n _onMouseEnter: function(e) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', { target: null, e: e });\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js orientation change\n * @param {Event} [self] Inner Event object\n */\n _onOrientationChange: function(e, self) {\n this.__onOrientationChange && this.__onOrientationChange(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onShake: function(e, self) {\n this.__onShake && this.__onShake(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onLongPress: function(e, self) {\n this.__onLongPress && this.__onLongPress(e, self);\n },\n\n /**\n * prevent default to allow drop event to be fired\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n _onDragOver: function(e) {\n e.preventDefault();\n var target = this._simpleEventHandler('dragover', e);\n this._fireEnterLeaveEvents(target, e);\n },\n\n /**\n * `drop:before` is a an event that allow you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @param {Event} e\n */\n _onDrop: function (e) {\n this._simpleEventHandler('drop:before', e);\n return this._simpleEventHandler('drop', e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onContextMenu: function (e) {\n if (this.stopContextMenu) {\n e.stopPropagation();\n e.preventDefault();\n }\n return false;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onDoubleClick: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData(e);\n },\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId: function(evt) {\n var changedTouches = evt.changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return evt.pointerId;\n }\n\n return -1;\n },\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent: function(evt) {\n if (evt.isPrimary === true) {\n return true;\n }\n if (evt.isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && evt.touches.length === 0) {\n return true;\n }\n if (evt.changedTouches) {\n return evt.changedTouches[0].identifier === this.mainTouchId;\n }\n return true;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart: function(e) {\n e.preventDefault();\n if (this.mainTouchId === null) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown: function (e) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd: function(e) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n this.mainTouchId = null;\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n var _this = this;\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(function() {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n _this._willAddMouseDown = 0;\n }, 400);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp: function (e) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove: function (e) {\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n this.__onMouseMove(e);\n },\n\n /**\n * @private\n */\n _onResize: function () {\n this.calcOffset();\n },\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender: function(target) {\n var activeObject = this._activeObject;\n\n if (\n !!activeObject !== !!target ||\n (activeObject && target && (activeObject !== target))\n ) {\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return true;\n }\n else if (activeObject && activeObject.isEditing) {\n // if we mouse up/down over a editing textbox a cursor change,\n // there is no need to re render\n return false;\n }\n return false;\n },\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp: function (e) {\n var target, transform = this._currentTransform,\n groupSelector = this._groupSelector, shouldRender = false,\n isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\n this._cacheTransformEventData(e);\n target = this._target;\n this._handleEvent(e, 'up:before');\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n }\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n var targetWasActive = target === this._activeObject;\n this._maybeGroupObjects(e);\n if (!shouldRender) {\n shouldRender = (\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject)\n );\n }\n }\n var corner, pointer;\n if (target) {\n corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {\n this.setActiveObject(target, e);\n shouldRender = true;\n }\n else {\n var control = target.controls[corner],\n mouseUpHandler = control && control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getPointer(e);\n mouseUpHandler(e, transform, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (transform && (transform.target !== target || transform.corner !== corner)) {\n var originalControl = transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);\n pointer = pointer || this.getPointer(e);\n originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = 0);\n if (shouldRender) {\n this.requestRenderAll();\n }\n else if (!isClick) {\n this.renderTop();\n }\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @return {Fabric.Object} target return the the target found, for internal reasons.\n */\n _simpleEventHandler: function(eventType, e) {\n var target = this.findTarget(e),\n targets = this.targets,\n options = {\n e: e,\n target: target,\n subTargets: targets,\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n if (!targets) {\n return target;\n }\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(eventType, options);\n }\n return target;\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @param {fabric.Object} targetObj receiving event\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n */\n _handleEvent: function(e, eventType, button, isClick) {\n var target = this._target,\n targets = this.targets || [],\n options = {\n e: e,\n target: target,\n subTargets: targets,\n button: button || LEFT_CLICK,\n isClick: isClick || false,\n pointer: this._pointer,\n absolutePointer: this._absolutePointer,\n transform: this._currentTransform\n };\n if (eventType === 'up') {\n options.currentTarget = this.findTarget(e);\n options.currentSubTargets = this.targets;\n }\n this.fire('mouse:' + eventType, options);\n target && target.fire('mouse' + eventType, options);\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire('mouse' + eventType, options);\n }\n },\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform: function(e) {\n\n var transform = this._currentTransform,\n target = transform.target,\n options = {\n e: e,\n target: target,\n transform: transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\n this._fire('modified', options);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode: function(e) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e).requestRenderAll();\n }\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\n this._handleEvent(e, 'down');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode: function(e) {\n if (this._isCurrentlyDrawing) {\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode: function(e) {\n var pointer = this.getPointer(e);\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\n this._handleEvent(e, 'up');\n },\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n var target = this._target;\n // if right click just fire events\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'down', RIGHT_CLICK);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'down', MIDDLE_CLICK);\n }\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n var pointer = this._pointer;\n // save pointer for check in __onMouseUp event\n this._previousPointer = pointer;\n var shouldRender = this._shouldRender(target),\n shouldGroup = this._shouldGroup(e, target);\n if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n else if (shouldGroup) {\n this._handleGrouping(e, target);\n target = this._activeObject;\n }\n\n if (this.selection && (!target ||\n (!target.selectable && !target.isEditing && target !== this._activeObject))) {\n this._groupSelector = {\n ex: this._absolutePointer.x,\n ey: this._absolutePointer.y,\n top: 0,\n left: 0\n };\n }\n\n if (target) {\n var alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n var corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n target.__corner = corner;\n if (target === this._activeObject && (corner || !shouldGroup)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n var control = target.controls[corner],\n pointer = this.getPointer(e),\n mouseDownHandler = control && control.getMouseDownHandler(e, target, control);\n if (mouseDownHandler) {\n mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);\n }\n }\n }\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n (shouldRender || shouldGroup) && this.requestRenderAll();\n },\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData: function() {\n this._target = null;\n this._pointer = null;\n this._absolutePointer = null;\n },\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData: function(e) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getPointer(e, true);\n this._absolutePointer = this.restorePointerVpt(this._pointer);\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n },\n\n /**\n * @private\n */\n _beforeTransform: function(e) {\n var t = this._currentTransform;\n this.stateful && t.target.saveState();\n this.fire('before:transform', {\n e: e,\n transform: t,\n });\n },\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove: function (e) {\n this._handleEvent(e, 'move:before');\n this._cacheTransformEventData(e);\n var target, pointer;\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n var groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n pointer = this._absolutePointer;\n\n groupSelector.left = pointer.x - groupSelector.ex;\n groupSelector.top = pointer.y - groupSelector.ey;\n\n this.renderTop();\n }\n else if (!this._currentTransform) {\n target = this.findTarget(e) || null;\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(target, e);\n }\n else {\n this._transformObject(e);\n }\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n },\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents: function(target, e) {\n var _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _hoveredTarget,\n evtOut: 'mouseout',\n canvasEvtOut: 'mouse:out',\n evtIn: 'mouseover',\n canvasEvtIn: 'mouse:over',\n });\n for (var i = 0; i < length; i++){\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'mouseout',\n evtIn: 'mouseover',\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n },\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Event} e Event object fired on ondrag\n * @private\n */\n _fireEnterLeaveEvents: function(target, e) {\n var _draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _draggedoverTarget,\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n }\n this._draggedoverTarget = target;\n },\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Event} e Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents: function(target, e, config) {\n var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\n targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\n if (targetChanged) {\n inOpt = { e: e, target: target, previousTarget: oldTarget };\n outOpt = { e: e, target: oldTarget, nextTarget: target };\n }\n inFires = target && targetChanged;\n outFires = oldTarget && targetChanged;\n if (outFires) {\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n oldTarget.fire(config.evtOut, outOpt);\n }\n if (inFires) {\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n target.fire(config.evtIn, inOpt);\n }\n },\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel: function(e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n },\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject: function(e) {\n var pointer = this.getPointer(e),\n transform = this._currentTransform;\n\n transform.reset = false;\n transform.shiftKey = e.shiftKey;\n transform.altKey = e[this.centeredKey];\n\n this._performTransformAction(e, transform, pointer);\n transform.actionPerformed && this.requestRenderAll();\n },\n\n /**\n * @private\n */\n _performTransformAction: function(e, transform, pointer) {\n var x = pointer.x,\n y = pointer.y,\n action = transform.action,\n actionPerformed = false,\n actionHandler = transform.actionHandler;\n // this object could be created from the function in the control handlers\n\n\n if (actionHandler) {\n actionPerformed = actionHandler(e, transform, x, y);\n }\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n },\n\n /**\n * @private\n */\n _fire: fabric.controlsUtils.fireEvent,\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent: function (e, target) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return false;\n }\n var hoverCursor = target.hoverCursor || this.hoverCursor,\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\n this._activeObject : null,\n // only show proper corner when group selection is not active\n corner = (!activeSelection || !activeSelection.contains(target))\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n && target._findTargetCorner(this.getPointer(e, true));\n\n if (!corner) {\n if (target.subTargetCheck){\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets.concat().reverse().map(function(_target){\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n }\n else {\n this.setCursor(this.getCornerCursor(corner, target, e));\n }\n },\n\n /**\n * @private\n */\n getCornerCursor: function(corner, target, e) {\n var control = target.controls[corner];\n return control.cursorStyleHandler(e, control, target);\n }\n });\n})();\n\n\n(function() {\n\n var min = Math.min,\n max = Math.max;\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n * @return {Boolean}\n */\n _shouldGroup: function(e, target) {\n var activeObject = this._activeObject;\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\n (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _handleGrouping: function (e, target) {\n var activeObject = this._activeObject;\n // avoid multi select when shift click on a corner\n if (activeObject.__corner) {\n return;\n }\n if (target === activeObject) {\n // if it's a group, find target again, using activeGroup objects\n target = this.findTarget(e, true);\n // if even object is not found or we are on activeObjectCorner, bail out\n if (!target || !target.selectable) {\n return;\n }\n }\n if (activeObject && activeObject.type === 'activeSelection') {\n this._updateActiveSelection(target, e);\n }\n else {\n this._createActiveSelection(target, e);\n }\n },\n\n /**\n * @private\n */\n _updateActiveSelection: function(target, e) {\n var activeSelection = this._activeObject,\n currentActiveObjects = activeSelection._objects.slice(0);\n if (activeSelection.contains(target)) {\n activeSelection.removeWithUpdate(target);\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n if (activeSelection.size() === 1) {\n // activate last remaining object\n this._setActiveObject(activeSelection.item(0), e);\n }\n }\n else {\n activeSelection.addWithUpdate(target);\n this._hoveredTarget = activeSelection;\n this._hoveredTargets = this.targets.concat();\n }\n this._fireSelectionEvents(currentActiveObjects, e);\n },\n\n /**\n * @private\n */\n _createActiveSelection: function(target, e) {\n var currentActives = this.getActiveObjects(), group = this._createGroup(target);\n this._hoveredTarget = group;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(group, e);\n this._fireSelectionEvents(currentActives, e);\n },\n\n /**\n * @private\n * @param {Object} target\n */\n _createGroup: function(target) {\n var objects = this._objects,\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n groupObjects = isActiveLower\n ? [this._activeObject, target]\n : [target, this._activeObject];\n this._activeObject.isEditing && this._activeObject.exitEditing();\n return new fabric.ActiveSelection(groupObjects, {\n canvas: this\n });\n },\n\n /**\n * @private\n * @param {Event} e mouse event\n */\n _groupSelectedObjects: function (e) {\n\n var group = this._collectObjects(e),\n aGroup;\n\n // do not create group for 1 element only\n if (group.length === 1) {\n this.setActiveObject(group[0], e);\n }\n else if (group.length > 1) {\n aGroup = new fabric.ActiveSelection(group.reverse(), {\n canvas: this\n });\n this.setActiveObject(aGroup, e);\n }\n },\n\n /**\n * @private\n */\n _collectObjects: function(e) {\n var group = [],\n currentObject,\n x1 = this._groupSelector.ex,\n y1 = this._groupSelector.ey,\n x2 = x1 + this._groupSelector.left,\n y2 = y1 + this._groupSelector.top,\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n allowIntersect = !this.selectionFullyContained,\n isClick = x1 === x2 && y1 === y2;\n // we iterate reverse order to collect top first in case of click.\n for (var i = this._objects.length; i--; ) {\n currentObject = this._objects[i];\n\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n continue;\n }\n\n if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2, true)) ||\n currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2, true) ||\n (allowIntersect && currentObject.containsPoint(selectionX1Y1, null, true)) ||\n (allowIntersect && currentObject.containsPoint(selectionX2Y2, null, true))\n ) {\n group.push(currentObject);\n // only add one object if it's a click\n if (isClick) {\n break;\n }\n }\n }\n\n if (group.length > 1) {\n group = group.filter(function(object) {\n return !object.onSelect({ e: e });\n });\n }\n\n return group;\n },\n\n /**\n * @private\n */\n _maybeGroupObjects: function(e) {\n if (this.selection && this._groupSelector) {\n this._groupSelectedObjects(e);\n }\n this.setCursor(this.defaultCursor);\n // clear selection and current transformation\n this._groupSelector = null;\n }\n });\n\n})();\n\n\n(function () {\n fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n */\n toDataURL: function (options) {\n options || (options = { });\n\n var format = options.format || 'png',\n quality = options.quality || 1,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n canvasEl = this.toCanvasElement(multiplier, options);\n return fabric.util.toDataURL(canvasEl, format, quality);\n },\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [cropping] Cropping informations\n * @param {Number} [cropping.left] Cropping left offset.\n * @param {Number} [cropping.top] Cropping top offset.\n * @param {Number} [cropping.width] Cropping width.\n * @param {Number} [cropping.height] Cropping height.\n */\n toCanvasElement: function(multiplier, cropping) {\n multiplier = multiplier || 1;\n cropping = cropping || { };\n var scaledWidth = (cropping.width || this.width) * multiplier,\n scaledHeight = (cropping.height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n originalInteractive = this.interactive,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n originalRetina = this.enableRetinaScaling,\n canvasEl = fabric.util.createCanvasElement(),\n originalContextTop = this.contextTop;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.contextTop = null;\n this.enableRetinaScaling = false;\n this.interactive = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.interactive = originalInteractive;\n this.enableRetinaScaling = originalRetina;\n this.contextTop = originalContextTop;\n return canvasEl;\n },\n });\n\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * });\n */\n loadFromJSON: function (json, callback, reviver) {\n if (!json) {\n return;\n }\n\n // serialize if it wasn't already\n var serialized = (typeof json === 'string')\n ? JSON.parse(json)\n : fabric.util.object.clone(json);\n\n var _this = this,\n clipPath = serialized.clipPath,\n renderOnAddRemove = this.renderOnAddRemove;\n\n this.renderOnAddRemove = false;\n\n delete serialized.clipPath;\n\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n _this.clear();\n _this._setBgOverlay(serialized, function () {\n if (clipPath) {\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n _this.clipPath = enlivenedCanvasClip[0];\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n });\n }\n else {\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n }\n });\n }, reviver);\n return this;\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Array} restored canvas objects\n * @param {Function} cached renderOnAddRemove callback\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n var _this = this;\n enlivenedObjects.forEach(function(obj, index) {\n // we splice the array just in case some custom classes restored from JSON\n // will add more object to canvas at canvas init.\n _this.insertAt(obj, index);\n });\n this.renderOnAddRemove = renderOnAddRemove;\n // remove parts i cannot set as options\n delete serialized.objects;\n delete serialized.backgroundImage;\n delete serialized.overlayImage;\n delete serialized.background;\n delete serialized.overlay;\n // this._initOptions does too many things to just\n // call it. Normally loading an Object from JSON\n // create the Object instance. Here the Canvas is\n // already an instance and we are just loading things over it\n this._setOptions(serialized);\n this.renderAll();\n callback && callback();\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n _setBgOverlay: function(serialized, callback) {\n var loaded = {\n backgroundColor: false,\n overlayColor: false,\n backgroundImage: false,\n overlayImage: false\n };\n\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n callback && callback();\n return;\n }\n\n var cbIfLoaded = function () {\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n callback && callback();\n }\n };\n\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n },\n\n /**\n * @private\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n * @param {(Object|String)} value Value to set\n * @param {Object} loaded Set loaded property to true if property is set\n * @param {Object} callback Callback function to invoke after property is set\n */\n __setBgOverlay: function(property, value, loaded, callback) {\n var _this = this;\n\n if (!value) {\n loaded[property] = true;\n callback && callback();\n return;\n }\n\n if (property === 'backgroundImage' || property === 'overlayImage') {\n fabric.util.enlivenObjects([value], function(enlivedObject){\n _this[property] = enlivedObject[0];\n loaded[property] = true;\n callback && callback();\n });\n }\n else {\n this['set' + fabric.util.string.capitalize(property, true)](value, function() {\n loaded[property] = true;\n callback && callback();\n });\n }\n },\n\n /**\n * @private\n * @param {Array} objects\n * @param {Function} callback\n * @param {Function} [reviver]\n */\n _enlivenObjects: function (objects, callback, reviver) {\n if (!objects || objects.length === 0) {\n callback && callback([]);\n return;\n }\n\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, null, reviver);\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Function} callback\n */\n _toDataURL: function (format, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURL(format));\n });\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Number} multiplier\n * @param {Function} callback\n */\n _toDataURLWithMultiplier: function (format, multiplier, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURLWithMultiplier(format, multiplier));\n });\n },\n\n /**\n * Clones canvas instance\n * @param {Object} [callback] Receives cloned instance as a first argument\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n */\n clone: function (callback, properties) {\n var data = JSON.stringify(this.toJSON(properties));\n this.cloneWithoutData(function(clone) {\n clone.loadFromJSON(data, function() {\n callback && callback(clone);\n });\n });\n },\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions, clipping properties, etc.\n * but leaves data empty (so that you can populate it with your own)\n * @param {Object} [callback] Receives cloned instance as a first argument\n */\n cloneWithoutData: function(callback) {\n var el = fabric.util.createCanvasElement();\n\n el.width = this.width;\n el.height = this.height;\n\n var clone = new fabric.Canvas(el);\n if (this.backgroundImage) {\n clone.setBackgroundImage(this.backgroundImage.src, function() {\n clone.renderAll();\n callback && callback(clone);\n });\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\n clone.backgroundImageStretch = this.backgroundImageStretch;\n }\n else {\n callback && callback(clone);\n }\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n capitalize = fabric.util.string.capitalize,\n degreesToRadians = fabric.util.degreesToRadians,\n objectCaching = !fabric.isLikelyNode,\n ALIASING_LIMIT = 2;\n\n if (fabric.Object) {\n return;\n }\n\n /**\n * Root object class from which all 2d shape classes inherit from\n * @class fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n * @see {@link fabric.Object#initialize} for constructor definition\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n * @fires modified\n * @fires modified\n * @fires moved\n * @fires scaled\n * @fires rotated\n * @fires skewed\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\n fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\n\n /**\n * Type of an object (rect, circle, path, etc.).\n * Note that this property is meant to be read-only and not meant to be modified.\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n * @type String\n * @default\n */\n type: 'object',\n\n /**\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originX: 'left',\n\n /**\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originY: 'top',\n\n /**\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n * @type Number\n * @default\n */\n top: 0,\n\n /**\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n * @type Number\n * @default\n */\n left: 0,\n\n /**\n * Object width\n * @type Number\n * @default\n */\n width: 0,\n\n /**\n * Object height\n * @type Number\n * @default\n */\n height: 0,\n\n /**\n * Object scale factor (horizontal)\n * @type Number\n * @default\n */\n scaleX: 1,\n\n /**\n * Object scale factor (vertical)\n * @type Number\n * @default\n */\n scaleY: 1,\n\n /**\n * When true, an object is rendered as flipped horizontally\n * @type Boolean\n * @default\n */\n flipX: false,\n\n /**\n * When true, an object is rendered as flipped vertically\n * @type Boolean\n * @default\n */\n flipY: false,\n\n /**\n * Opacity of an object\n * @type Number\n * @default\n */\n opacity: 1,\n\n /**\n * Angle of rotation of an object (in degrees)\n * @type Number\n * @default\n */\n angle: 0,\n\n /**\n * Angle of skew on x axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewX: 0,\n\n /**\n * Angle of skew on y axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewY: 0,\n\n /**\n * Size of object's controlling corners (in pixels)\n * @type Number\n * @default\n */\n cornerSize: 13,\n\n /**\n * Size of object's controlling corners when touch interaction is detected\n * @type Number\n * @default\n */\n touchCornerSize: 24,\n\n /**\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n * @type Boolean\n * @default\n */\n transparentCorners: true,\n\n /**\n * Default cursor value used when hovering over this object on canvas\n * @type String\n * @default\n */\n hoverCursor: null,\n\n /**\n * Default cursor value used when moving this object on canvas\n * @type String\n * @default\n */\n moveCursor: null,\n\n /**\n * Padding between object and its controlling borders (in pixels)\n * @type Number\n * @default\n */\n padding: 0,\n\n /**\n * Color of controlling borders of an object (when it's active)\n * @type String\n * @default\n */\n borderColor: 'rgb(178,204,255)',\n\n /**\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n borderDashArray: null,\n\n /**\n * Color of controlling corners of an object (when it's active)\n * @type String\n * @default\n */\n cornerColor: 'rgb(178,204,255)',\n\n /**\n * Color of controlling corners of an object (when it's active and transparentCorners false)\n * @since 1.6.2\n * @type String\n * @default\n */\n cornerStrokeColor: null,\n\n /**\n * Specify style of control, 'rect' or 'circle'\n * @since 1.6.2\n * @type String\n */\n cornerStyle: 'rect',\n\n /**\n * Array specifying dash pattern of an object's control (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n cornerDashArray: null,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being scaled via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being rotated via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: true,\n\n /**\n * Color of object's fill\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n fill: 'rgb(0,0,0)',\n\n /**\n * Fill rule used to fill an object\n * accepted values are nonzero, evenodd\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n * @type String\n * @default\n */\n fillRule: 'nonzero',\n\n /**\n * Composite rule used for canvas globalCompositeOperation\n * @type String\n * @default\n */\n globalCompositeOperation: 'source-over',\n\n /**\n * Background color of an object.\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n backgroundColor: '',\n\n /**\n * Selection Background color of an object. colored layer behind the object when it is active.\n * does not mix good with globalCompositeOperation methods.\n * @type String\n * @default\n */\n selectionBackgroundColor: '',\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Width of a stroke used to render this object\n * @type Number\n * @default\n */\n strokeWidth: 1,\n\n /**\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\n * @type Array\n */\n strokeDashArray: null,\n\n /**\n * Line offset of an object's stroke\n * @type Number\n * @default\n */\n strokeDashOffset: 0,\n\n /**\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'butt',\n\n /**\n * Corner style of an object's stroke (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'miter',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n * @type Number\n * @default\n */\n strokeMiterLimit: 4,\n\n /**\n * Shadow object representing shadow of this shape\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Opacity of object's controlling borders when object is active and moving\n * @type Number\n * @default\n */\n borderOpacityWhenMoving: 0.4,\n\n /**\n * Scale factor of object's controlling borders\n * bigger number will make a thicker border\n * border is 1, so this is basically a border thickness\n * since there is no way to change the border itself.\n * @type Number\n * @default\n */\n borderScaleFactor: 1,\n\n /**\n * Minimum allowed scale value of an object\n * @type Number\n * @default\n */\n minScaleLimit: 0,\n\n /**\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n * But events still fire on it.\n * @type Boolean\n * @default\n */\n selectable: true,\n\n /**\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n * @type Boolean\n * @default\n */\n evented: true,\n\n /**\n * When set to `false`, an object is not rendered on canvas\n * @type Boolean\n * @default\n */\n visible: true,\n\n /**\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n * @type Boolean\n * @default\n */\n hasControls: true,\n\n /**\n * When set to `false`, object's controlling borders are not rendered\n * @type Boolean\n * @default\n */\n hasBorders: true,\n\n /**\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * When `false`, default object's values are not included in its serialization\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * When `true`, object horizontal movement is locked\n * @type Boolean\n * @default\n */\n lockMovementX: false,\n\n /**\n * When `true`, object vertical movement is locked\n * @type Boolean\n * @default\n */\n lockMovementY: false,\n\n /**\n * When `true`, object rotation is locked\n * @type Boolean\n * @default\n */\n lockRotation: false,\n\n /**\n * When `true`, object horizontal scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingX: false,\n\n /**\n * When `true`, object vertical scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingY: false,\n\n /**\n * When `true`, object horizontal skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingX: false,\n\n /**\n * When `true`, object vertical skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingY: false,\n\n /**\n * When `true`, object cannot be flipped by scaling into negative values\n * @type Boolean\n * @default\n */\n lockScalingFlip: false,\n\n /**\n * When `true`, object is not exported in OBJECT/JSON\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n excludeFromExport: false,\n\n /**\n * When `true`, object is cached on an additional canvas.\n * When `false`, object is not cached unless necessary ( clipPath )\n * default to true\n * @since 1.7.0\n * @type Boolean\n * @default true\n */\n objectCaching: objectCaching,\n\n /**\n * When `true`, object properties are checked for cache invalidation. In some particular\n * situation you may want this to be disabled ( spray brush, very big, groups)\n * or if your application does not allow you to modify properties for groups child you want\n * to disable it for groups.\n * default to false\n * since 1.7.0\n * @type Boolean\n * @default false\n */\n statefullCache: false,\n\n /**\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n * too much and will be redrawn with correct details at the end of scaling.\n * this setting is performance and application dependant.\n * default to true\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n noScaleCache: true,\n\n /**\n * When `false`, the stoke width will scale with the object.\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n * this Property does not work on Text classes or drawing call that uses strokeText,fillText methods\n * default to false\n * @since 2.6.0\n * @type Boolean\n * @default false\n * @type Boolean\n * @default false\n */\n strokeUniform: false,\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n dirty: true,\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * @type number|string|any\n * @default 0\n */\n __corner: 0,\n\n /**\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n * @type String\n * @default\n */\n paintFirst: 'fill',\n\n /**\n * When 'down', object is set to active on mousedown/touchstart\n * When 'up', object is set to active on mouseup/touchend\n * Experimental. Let's see if this breaks anything before supporting officially\n * @private\n * since 4.4.0\n * @type String\n * @default 'down'\n */\n activeOn: 'down',\n\n /**\n * List of properties to consider when checking if state\n * of an object is changed (fabric.Object#hasStateChanged)\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: (\n 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\n 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\n 'angle opacity fill globalCompositeOperation shadow visible backgroundColor ' +\n 'skewX skewY fillRule paintFirst clipPath strokeUniform'\n ).split(' '),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: (\n 'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\n ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\n ).split(' '),\n\n /**\n * List of properties to consider for animating colors.\n * @type Array\n */\n colorProperties: (\n 'fill stroke backgroundColor'\n ).split(' '),\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\n * of the object cacheCanvas.\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will make the object clip to the outside of the clipPath\n * since 2.4.0\n * @type boolean\n * @default false\n */\n inverted: false,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will have its top and left relative to canvas, and will\n * not be influenced by the object transform. This will make the clipPath relative\n * to the canvas, but clipping just a particular object.\n * WARNING this is beta, this feature may change or be renamed.\n * since 2.4.0\n * @type boolean\n * @default false\n */\n absolutePositioned: false,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas: function() {\n this._cacheProperties = {};\n this._cacheCanvas = fabric.util.createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n },\n\n /**\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize: function(dims) {\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n width = dims.width, height = dims.height,\n max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n capValue = fabric.util.capValue,\n x = capValue(min, limitedDims.x, max),\n y = capValue(min, limitedDims.y, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var objectScale = this.getTotalObjectScaling(),\n // caculate dimensions without skewing\n dim = this._getTransformedDimensions(0, 0),\n neededX = dim.x * objectScale.scaleX / this.scaleX,\n neededY = dim.y * objectScale.scaleY / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.scaleX,\n zoomY: objectScale.scaleY,\n x: neededX,\n y: neededY\n };\n },\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas: function() {\n var targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n var target = targetCanvas._currentTransform.target,\n action = targetCanvas._currentTransform.action;\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n return false;\n }\n }\n var canvas = this._cacheCanvas,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = fabric.minCacheSideLimit,\n width = dims.width, height = dims.height, drawingWidth, drawingHeight,\n zoomX = dims.zoomX, zoomY = dims.zoomY,\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\n if (dimensionsChanged) {\n var canvasWidth = this._cacheCanvas.width,\n canvasHeight = this._cacheCanvas.height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (this instanceof fabric.Text && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n additionalWidth += this.getHeightOfLine(0) * this.zoomX;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n }\n else {\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n this.cacheWidth = width;\n this.cacheHeight = height;\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n this._cacheContext.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n },\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n this._setOptions(options);\n this._initGradient(options.fill, 'fill');\n this._initGradient(options.stroke, 'stroke');\n this._initPattern(options.fill, 'fill');\n this._initPattern(options.stroke, 'stroke');\n },\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform: function(ctx) {\n var needFullTransform = (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === this.canvas.contextTop);\n var m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n },\n\n /**\n * Returns an object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n\n object = {\n type: this.type,\n version: fabric.version,\n originX: this.originX,\n originY: this.originY,\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\n fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\n stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n strokeLineCap: this.strokeLineCap,\n strokeDashOffset: this.strokeDashOffset,\n strokeLineJoin: this.strokeLineJoin,\n strokeUniform: this.strokeUniform,\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n flipX: this.flipX,\n flipY: this.flipY,\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\n visible: this.visible,\n backgroundColor: this.backgroundColor,\n fillRule: this.fillRule,\n paintFirst: this.paintFirst,\n globalCompositeOperation: this.globalCompositeOperation,\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\n };\n\n if (this.clipPath && !this.clipPath.excludeFromExport) {\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\n object.clipPath.inverted = this.clipPath.inverted;\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n }\n\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n if (!this.includeDefaultValues) {\n object = this._removeDefaultValues(object);\n }\n\n return object;\n },\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues: function(object) {\n var prototype = fabric.util.getKlass(object.type).prototype,\n stateProperties = prototype.stateProperties;\n stateProperties.forEach(function(prop) {\n if (prop === 'left' || prop === 'top') {\n return;\n }\n if (object[prop] === prototype[prop]) {\n delete object[prop];\n }\n // basically a check for [] === []\n if (Array.isArray(object[prop]) && Array.isArray(prototype[prop])\n && object[prop].length === 0 && prototype[prop].length === 0) {\n delete object[prop];\n }\n });\n\n return object;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Object} object with scaleX and scaleY properties\n */\n getObjectScaling: function() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n };\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\n },\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling: function() {\n var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\n if (this.canvas) {\n var zoom = this.canvas.getZoom();\n var retina = this.canvas.getRetinaScaling();\n scaleX *= zoom * retina;\n scaleY *= zoom * retina;\n }\n return { scaleX: scaleX, scaleY: scaleY };\n },\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity: function() {\n var opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Object} thisArg\n */\n _set: function(key, value) {\n var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\n isChanged = this[key] !== value, groupNeedsUpdate = false;\n\n if (shouldConstrainValue) {\n value = this._constrainScale(value);\n }\n if (key === 'scaleX' && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n }\n else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n }\n else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n value = new fabric.Shadow(value);\n }\n else if (key === 'dirty' && this.group) {\n this.group.set('dirty', value);\n }\n\n this[key] = value;\n\n if (isChanged) {\n groupNeedsUpdate = this.group && this.group.isOnACache();\n if (this.cacheProperties.indexOf(key) > -1) {\n this.dirty = true;\n groupNeedsUpdate && this.group.set('dirty', true);\n }\n else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n this.group.set('dirty', true);\n }\n }\n return this;\n },\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup: function() {\n // implemented by sub-classes, as needed.\n },\n\n /**\n * Retrieves viewportTransform from Object's canvas if possible\n * @method getViewportTransform\n * @memberOf fabric.Object.prototype\n * @return {Array}\n */\n getViewportTransform: function() {\n if (this.canvas && this.canvas.viewportTransform) {\n return this.canvas.viewportTransform;\n }\n return fabric.iMatrix.concat();\n },\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf fabric.Object.prototype\n * @return {Boolean}\n */\n isNotVisible: function() {\n return this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible;\n },\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx, this);\n if (this.shouldCache()) {\n this.renderCache();\n this.drawCacheOnCanvas(ctx);\n }\n else {\n this._removeCacheCanvas();\n this.dirty = false;\n this.drawObject(ctx);\n if (this.objectCaching && this.statefullCache) {\n this.saveState({ propertySet: 'cacheProperties' });\n }\n }\n ctx.restore();\n },\n\n renderCache: function(options) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty()) {\n this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n },\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas: function() {\n this._cacheCanvas = null;\n this._cacheContext = null;\n this.cacheWidth = 0;\n this.cacheHeight = 0;\n },\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke: function() {\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n },\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill: function() {\n return this.fill && this.fill !== 'transparent';\n },\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache: function() {\n if (this.paintFirst === 'stroke' &&\n this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache: function() {\n this.ownCaching = this.needsItsOwnCache() || (\n this.objectCaching &&\n (!this.group || !this.group.isOnACache())\n );\n return this.ownCaching;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n */\n willDrawShadow: function() {\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n },\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Object} clipPath\n */\n drawClipPathOnCache: function(ctx, clipPath) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n }\n else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (clipPath.absolutePositioned) {\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx, forClipping) {\n var originalFill = this.fill, originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n }\n else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath);\n this.fill = originalFill;\n this.stroke = originalStroke;\n },\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {fabric.Object} clipPath\n */\n _drawClipPath: function (ctx, clipPath) {\n if (!clipPath) { return; }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n clipPath.canvas = this.canvas;\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx, clipPath);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n },\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty: function(skipCanvas) {\n if (this.isNotVisible()) {\n return false;\n }\n if (this._cacheCanvas && this._cacheContext && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n }\n else {\n if (this.dirty ||\n (this.clipPath && this.clipPath.absolutePositioned) ||\n (this.statefullCache && this.hasStateChanged('cacheProperties'))\n ) {\n if (this._cacheCanvas && this._cacheContext && !skipCanvas) {\n var width = this.cacheWidth / this.zoomX;\n var height = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n if (!this.backgroundColor) {\n return;\n }\n var dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(\n -dim.x / 2,\n -dim.y / 2,\n dim.x,\n dim.y\n );\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity: function(ctx) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n }\n else {\n ctx.globalAlpha *= this.opacity;\n }\n },\n\n _setStrokeStyles: function(ctx, decl) {\n var stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (stroke.toLive) {\n if (stroke.gradientUnits === 'percentage' || stroke.gradientTransform || stroke.patternTransform) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n }\n else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, stroke);\n }\n }\n else {\n // is a color\n ctx.strokeStyle = decl.stroke;\n }\n }\n },\n\n _setFillStyles: function(ctx, decl) {\n var fill = decl.fill;\n if (fill) {\n if (fill.toLive) {\n ctx.fillStyle = fill.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, decl.fill);\n }\n else {\n ctx.fillStyle = fill;\n }\n }\n },\n\n _setClippingProperties: function(ctx) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n },\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash: function(ctx, dashArray) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push.apply(dashArray, dashArray);\n }\n ctx.setLineDash(dashArray);\n },\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n */\n _renderControls: function(ctx, styleOverride) {\n var vpt = this.getViewportTransform(),\n matrix = this.calcTransformMatrix(),\n options, drawBorders, drawControls;\n styleOverride = styleOverride || { };\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n options = fabric.util.qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n if (!this.group) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n if (styleOverride.forActiveSelection || this.group) {\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n }\n else {\n drawBorders && this.drawBorders(ctx, styleOverride);\n }\n drawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n var shadow = this.shadow, canvas = this.canvas, scaling,\n multX = (canvas && canvas.viewportTransform[0]) || 1,\n multY = (canvas && canvas.viewportTransform[3]) || 1;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n if (canvas && canvas._isRetinaScaling()) {\n multX *= fabric.devicePixelRatio;\n multY *= fabric.devicePixelRatio;\n }\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\n (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function(ctx, filler) {\n if (!filler || !filler.toLive) {\n return { offsetX: 0, offsetY: 0 };\n }\n var t = filler.gradientTransform || filler.patternTransform;\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if (filler.gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n }\n else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n }\n else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n },\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(/* ctx */) {\n\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill: function(ctx) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n }\n else {\n ctx.fill();\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform && this.group) {\n var scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n }\n else if (this.strokeUniform) {\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Gradient} filler a fabric gradient instance\n */\n _applyPatternForTransformedGradient: function(ctx, filler) {\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx);\n pCtx.fill();\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n ctx.scale(\n retinaScaling * this.scaleX / dims.zoomX,\n retinaScaling * this.scaleY / dims.zoomY\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\n },\n\n /**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n * @chainable\n */\n _assignTransformMatrixProps: function() {\n if (this.transformMatrix) {\n var options = fabric.util.qrDecompose(this.transformMatrix);\n this.flipX = false;\n this.flipY = false;\n this.set('scaleX', options.scaleX);\n this.set('scaleY', options.scaleY);\n this.angle = options.angle;\n this.skewX = options.skewX;\n this.skewY = 0;\n }\n },\n\n /**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n * @return {thisArg}\n */\n _removeTransformMatrix: function(preserveAspectRatioOptions) {\n var center = this._findCenterFromElement();\n if (this.transformMatrix) {\n this._assignTransformMatrixProps();\n center = fabric.util.transformPoint(center, this.transformMatrix);\n }\n this.transformMatrix = null;\n if (preserveAspectRatioOptions) {\n this.scaleX *= preserveAspectRatioOptions.scaleX;\n this.scaleY *= preserveAspectRatioOptions.scaleY;\n this.cropX = preserveAspectRatioOptions.cropX;\n this.cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n this.width = preserveAspectRatioOptions.width;\n this.height = preserveAspectRatioOptions.height;\n }\n this.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * Clones an instance, using a callback method will work for every object.\n * @param {Function} callback Callback is invoked with a clone as a first argument\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n */\n clone: function(callback, propertiesToInclude) {\n var objectForm = this.toObject(propertiesToInclude);\n if (this.constructor.fromObject) {\n this.constructor.fromObject(objectForm, callback);\n }\n else {\n fabric.Object._fromObject('Object', objectForm, callback);\n }\n },\n\n /**\n * Creates an instance of fabric.Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * This method is sync now, but still support the callback because we did not want to break.\n * When fabricJS 5.0 will be planned, this will probably be changed to not have a callback.\n * @param {Function} callback callback, invoked with an instance as a first argument\n * @param {Object} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {fabric.Object} thisArg\n */\n cloneAsImage: function(callback, options) {\n var canvasEl = this.toCanvasElement(options);\n if (callback) {\n callback(new fabric.Image(canvasEl));\n }\n return this;\n },\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {Object} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {HTMLCanvasElement} Returns DOM element with the fabric.Object\n */\n toCanvasElement: function(options) {\n options || (options = { });\n\n var utils = fabric.util, origParams = utils.saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow, abs = Math.abs,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? fabric.devicePixelRatio : 1);\n delete this.group;\n if (options.withoutTransform) {\n utils.resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n\n var el = fabric.util.createCanvasElement(),\n // skip canvas zoom and calculate with setCoords now.\n boundingRect = this.getBoundingRect(true, true),\n shadow = this.shadow, scaling,\n shadowOffset = { x: 0, y: 0 }, shadowBlur,\n width, height;\n\n if (shadow) {\n shadowBlur = shadow.blur;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n // consider non scaling shadow.\n shadowOffset.x = 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * (abs(scaling.scaleX));\n shadowOffset.y = 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * (abs(scaling.scaleY));\n }\n width = boundingRect.width + shadowOffset.x;\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n var canvas = new fabric.StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n });\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(new fabric.Point(canvas.width / 2, canvas.height / 2), 'center', 'center');\n\n var originalCanvas = this.canvas;\n canvas.add(this);\n var canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.shadow = originalShadow;\n this.set('canvas', originalCanvas);\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams).setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n canvas.dispose();\n canvas = null;\n\n return canvasEl;\n },\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL: function(options) {\n options || (options = { });\n return fabric.util.toDataURL(this.toCanvasElement(options), options.format || 'png', options.quality || 1);\n },\n\n /**\n * Returns true if specified type is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType: function(type) {\n return arguments.length > 1 ? Array.from(arguments).includes(this.type) : this.type === type;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity: function() {\n return 1;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON\n */\n toJSON: function(propertiesToInclude) {\n // delegate, not alias\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {Number} angle Angle value (in degrees)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n rotate: function(angle) {\n var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation;\n\n if (shouldCenterOrigin) {\n this._setOriginToCenter();\n }\n\n this.set('angle', angle);\n\n if (shouldCenterOrigin) {\n this._resetOrigin();\n }\n\n return this;\n },\n\n /**\n * Centers object horizontally on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerH: function () {\n this.canvas && this.canvas.centerObjectH(this);\n return this;\n },\n\n /**\n * Centers object horizontally on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterH: function () {\n this.canvas && this.canvas.viewportCenterObjectH(this);\n return this;\n },\n\n /**\n * Centers object vertically on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerV: function () {\n this.canvas && this.canvas.centerObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterV: function () {\n this.canvas && this.canvas.viewportCenterObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically and horizontally on canvas to which is was added last\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n center: function () {\n this.canvas && this.canvas.centerObject(this);\n return this;\n },\n\n /**\n * Centers object on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenter: function () {\n this.canvas && this.canvas.viewportCenterObject(this);\n return this;\n },\n\n /**\n * Returns coordinates of a pointer relative to an object\n * @param {Event} e Event to operate upon\n * @param {Object} [pointer] Pointer to operate upon (instead of event)\n * @return {Object} Coordinates of a pointer (x, y)\n */\n getLocalPointer: function(e, pointer) {\n pointer = pointer || this.canvas.getPointer(e);\n var pClicked = new fabric.Point(pointer.x, pointer.y),\n objectLeftTop = this._getLeftTopCoords();\n if (this.angle) {\n pClicked = fabric.util.rotatePoint(\n pClicked, objectLeftTop, degreesToRadians(-this.angle));\n }\n return {\n x: pClicked.x - objectLeftTop.x,\n y: pClicked.y - objectLeftTop.y\n };\n },\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation: function (ctx) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n },\n\n /**\n * cancel instance's running animations\n * override if necessary to dispose artifacts such as `clipPath`\n */\n dispose: function () {\n if (fabric.runningAnimations) {\n fabric.runningAnimations.cancelByTarget(this);\n }\n }\n });\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object);\n\n extend(fabric.Object.prototype, fabric.Observable);\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n * @static\n * @memberOf fabric.Object\n * @constant\n * @type Number\n */\n fabric.Object.NUM_FRACTION_DIGITS = 2;\n\n /**\n * Defines which properties should be enlivened from the object passed to {@link fabric.Object._fromObject}\n * @static\n * @memberOf fabric.Object\n * @constant\n * @type string[]\n */\n fabric.Object.ENLIVEN_PROPS = ['clipPath'];\n\n fabric.Object._fromObject = function(className, object, callback, extraParam) {\n var klass = fabric[className];\n object = clone(object, true);\n fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) {\n if (typeof patterns[0] !== 'undefined') {\n object.fill = patterns[0];\n }\n if (typeof patterns[1] !== 'undefined') {\n object.stroke = patterns[1];\n }\n fabric.util.enlivenObjectEnlivables(object, object, function () {\n var instance = extraParam ? new klass(object[extraParam], object) : new klass(object);\n callback && callback(instance);\n });\n });\n };\n\n /**\n * Unique id used internally when creating SVG elements\n * @static\n * @memberOf fabric.Object\n * @type Number\n */\n fabric.Object.__uid = 0;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians,\n originXOffset = {\n left: -0.5,\n center: 0,\n right: 0.5\n },\n originYOffset = {\n top: -0.5,\n center: 0,\n bottom: 0.5\n };\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {String} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToGivenOrigin: function(point, fromOriginX, fromOriginY, toOriginX, toOriginY) {\n var x = point.x,\n y = point.y,\n offsetX, offsetY, dim;\n\n if (typeof fromOriginX === 'string') {\n fromOriginX = originXOffset[fromOriginX];\n }\n else {\n fromOriginX -= 0.5;\n }\n\n if (typeof toOriginX === 'string') {\n toOriginX = originXOffset[toOriginX];\n }\n else {\n toOriginX -= 0.5;\n }\n\n offsetX = toOriginX - fromOriginX;\n\n if (typeof fromOriginY === 'string') {\n fromOriginY = originYOffset[fromOriginY];\n }\n else {\n fromOriginY -= 0.5;\n }\n\n if (typeof toOriginY === 'string') {\n toOriginY = originYOffset[toOriginY];\n }\n else {\n toOriginY -= 0.5;\n }\n\n offsetY = toOriginY - fromOriginY;\n\n if (offsetX || offsetY) {\n dim = this._getTransformedDimensions();\n x = point.x + offsetX * dim.x;\n y = point.y + offsetY * dim.y;\n }\n\n return new fabric.Point(x, y);\n },\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToCenterPoint: function(point, originX, originY) {\n var p = this.translateToGivenOrigin(point, originX, originY, 'center', 'center');\n if (this.angle) {\n return fabric.util.rotatePoint(p, point, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {fabric.Point} center The point which corresponds to center of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToOriginPoint: function(center, originX, originY) {\n var p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n if (this.angle) {\n return fabric.util.rotatePoint(p, center, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Returns the real center coordinates of the object\n * @return {fabric.Point}\n */\n getCenterPoint: function() {\n var leftTop = new fabric.Point(this.left, this.top);\n return this.translateToCenterPoint(leftTop, this.originX, this.originY);\n },\n\n /**\n * Returns the coordinates of the object based on center coordinates\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @return {fabric.Point}\n */\n // getOriginPoint: function(center) {\n // return this.translateToOriginPoint(center, this.originX, this.originY);\n // },\n\n /**\n * Returns the coordinates of the object as if it has a different origin\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n getPointByOrigin: function(originX, originY) {\n var center = this.getCenterPoint();\n return this.translateToOriginPoint(center, originX, originY);\n },\n\n /**\n * Returns the point in local coordinates\n * @param {fabric.Point} point The point relative to the global coordinate system\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n toLocalPoint: function(point, originX, originY) {\n var center = this.getCenterPoint(),\n p, p2;\n\n if (typeof originX !== 'undefined' && typeof originY !== 'undefined' ) {\n p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n }\n else {\n p = new fabric.Point(this.left, this.top);\n }\n\n p2 = new fabric.Point(point.x, point.y);\n if (this.angle) {\n p2 = fabric.util.rotatePoint(p2, center, -degreesToRadians(this.angle));\n }\n return p2.subtractEquals(p);\n },\n\n /**\n * Returns the point in global coordinates\n * @param {fabric.Point} The point relative to the local coordinate system\n * @return {fabric.Point}\n */\n // toGlobalPoint: function(point) {\n // return fabric.util.rotatePoint(point, this.getCenterPoint(), degreesToRadians(this.angle)).addEquals(new fabric.Point(this.left, this.top));\n // },\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {fabric.Point} pos The new position of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin: function(pos, originX, originY) {\n var center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(center, this.originX, this.originY);\n this.set('left', position.x);\n this.set('top', position.y);\n },\n\n /**\n * @param {String} to One of 'left', 'center', 'right'\n */\n adjustPosition: function(to) {\n var angle = degreesToRadians(this.angle),\n hypotFull = this.getScaledWidth(),\n xFull = fabric.util.cos(angle) * hypotFull,\n yFull = fabric.util.sin(angle) * hypotFull,\n offsetFrom, offsetTo;\n\n //TODO: this function does not consider mixed situation like top, center.\n if (typeof this.originX === 'string') {\n offsetFrom = originXOffset[this.originX];\n }\n else {\n offsetFrom = this.originX - 0.5;\n }\n if (typeof to === 'string') {\n offsetTo = originXOffset[to];\n }\n else {\n offsetTo = to - 0.5;\n }\n this.left += xFull * (offsetTo - offsetFrom);\n this.top += yFull * (offsetTo - offsetFrom);\n this.setCoords();\n this.originX = to;\n },\n\n /**\n * Sets the origin/position of the object to it's center point\n * @private\n * @return {void}\n */\n _setOriginToCenter: function() {\n this._originalOriginX = this.originX;\n this._originalOriginY = this.originY;\n\n var center = this.getCenterPoint();\n\n this.originX = 'center';\n this.originY = 'center';\n\n this.left = center.x;\n this.top = center.y;\n },\n\n /**\n * Resets the origin/position of the object to it's original origin\n * @private\n * @return {void}\n */\n _resetOrigin: function() {\n var originPoint = this.translateToOriginPoint(\n this.getCenterPoint(),\n this._originalOriginX,\n this._originalOriginY);\n\n this.originX = this._originalOriginX;\n this.originY = this._originalOriginY;\n\n this.left = originPoint.x;\n this.top = originPoint.y;\n\n this._originalOriginX = null;\n this._originalOriginY = null;\n },\n\n /**\n * @private\n */\n _getLeftTopCoords: function() {\n return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top');\n },\n });\n\n})();\n\n\n(function() {\n\n function arrayFromCoords(coords) {\n return [\n new fabric.Point(coords.tl.x, coords.tl.y),\n new fabric.Point(coords.tr.x, coords.tr.y),\n new fabric.Point(coords.br.x, coords.br.y),\n new fabric.Point(coords.bl.x, coords.bl.y)\n ];\n }\n\n var util = fabric.util,\n degreesToRadians = util.degreesToRadians,\n multiplyMatrices = util.multiplyTransformMatrices,\n transformPoint = util.transformPoint;\n\n util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Describe object's corner position in canvas element coordinates.\n * properties are depending on control keys and padding the main controls.\n * each property is an object with x, y and corner.\n * The `corner` property contains in a similar manner the 4 points of the\n * interactive area of the corner.\n * The coordinates depends from the controls positionHandler and are used\n * to draw and locate controls\n * @memberOf fabric.Object.prototype\n */\n oCoords: null,\n\n /**\n * Describe object's corner position in canvas object absolute coordinates\n * properties are tl,tr,bl,br and describe the four main corner.\n * each property is an object with x, y, instance of Fabric.Point.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, top, left.\n * Those coordinates are useful to understand where an object is. They get updated\n * with oCoords but they do not need to be updated when zoom or panning change.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcACoords();\n * @memberOf fabric.Object.prototype\n */\n aCoords: null,\n\n /**\n * Describe object's corner position in canvas element coordinates.\n * includes padding. Used of object detection.\n * set and refreshed with setCoords.\n * @memberOf fabric.Object.prototype\n */\n lineCoords: null,\n\n /**\n * storage for object transform matrix\n */\n ownMatrixCache: null,\n\n /**\n * storage for object full transform matrix\n */\n matrixCache: null,\n\n /**\n * custom controls interface\n * controls are added by default_controls.js\n */\n controls: { },\n\n /**\n * return correct set of coordinates for intersection\n * this will return either aCoords or lineCoords.\n * @param {Boolean} absolute will return aCoords if true or lineCoords\n * @return {Object} {tl, tr, br, bl} points\n */\n _getCoords: function(absolute, calculate) {\n if (calculate) {\n return (absolute ? this.calcACoords() : this.calcLineCoords());\n }\n if (!this.aCoords || !this.lineCoords) {\n this.setCoords(true);\n }\n return (absolute ? this.aCoords : this.lineCoords);\n },\n\n /**\n * return correct set of coordinates for intersection\n * this will return either aCoords or lineCoords.\n * The coords are returned in an array.\n * @return {Array} [tl, tr, br, bl] of points\n */\n getCoords: function(absolute, calculate) {\n return arrayFromCoords(this._getCoords(absolute, calculate));\n },\n\n /**\n * Checks if object intersects with an area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with an area formed by 2 points\n */\n intersectsWithRect: function(pointTL, pointBR, absolute, calculate) {\n var coords = this.getCoords(absolute, calculate),\n intersection = fabric.Intersection.intersectPolygonRectangle(\n coords,\n pointTL,\n pointBR\n );\n return intersection.status === 'Intersection';\n },\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject: function(other, absolute, calculate) {\n var intersection = fabric.Intersection.intersectPolygonPolygon(\n this.getCoords(absolute, calculate),\n other.getCoords(absolute, calculate)\n );\n\n return intersection.status === 'Intersection'\n || other.isContainedWithinObject(this, absolute, calculate)\n || this.isContainedWithinObject(other, absolute, calculate);\n },\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject: function(other, absolute, calculate) {\n var points = this.getCoords(absolute, calculate),\n otherCoords = absolute ? other.aCoords : other.lineCoords,\n i = 0, lines = other._getImageLines(otherCoords);\n for (; i < 4; i++) {\n if (!other.containsPoint(points[i], lines)) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Checks if object is fully contained within area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area formed by 2 points\n */\n isContainedWithinRect: function(pointTL, pointBR, absolute, calculate) {\n var boundingRect = this.getBoundingRect(absolute, calculate);\n\n return (\n boundingRect.left >= pointTL.x &&\n boundingRect.left + boundingRect.width <= pointBR.x &&\n boundingRect.top >= pointTL.y &&\n boundingRect.top + boundingRect.height <= pointBR.y\n );\n },\n\n /**\n * Checks if point is inside the object\n * @param {fabric.Point} point Point to check against\n * @param {Object} [lines] object returned from @method _getImageLines\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if point is inside the object\n */\n containsPoint: function(point, lines, absolute, calculate) {\n var coords = this._getCoords(absolute, calculate),\n lines = lines || this._getImageLines(coords),\n xPoints = this._findCrossPoints(point, lines);\n // if xPoints is odd then point is inside the object\n return (xPoints !== 0 && xPoints % 2 === 1);\n },\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n var points = this.getCoords(true, calculate);\n // if some point is on screen, the object is on screen.\n if (points.some(function(point) {\n return point.x <= pointBR.x && point.x >= pointTL.x &&\n point.y <= pointBR.y && point.y >= pointTL.y;\n })) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Checks if the object contains the midpoint between canvas extremities\n * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n * @private\n * @param {Fabric.Point} pointTL Top Left point\n * @param {Fabric.Point} pointBR Top Right point\n * @param {Boolean} calculate use coordinates of current position instead of .oCoords\n * @return {Boolean} true if the object contains the point\n */\n _containsCenterOfCanvas: function(pointTL, pointBR, calculate) {\n // worst case scenario the object is so big that contains the screen\n var centerPoint = { x: (pointTL.x + pointBR.x) / 2, y: (pointTL.y + pointBR.y) / 2 };\n if (this.containsPoint(centerPoint, null, true, calculate)) {\n return true;\n }\n return false;\n },\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n var allPointsAreOutside = this.getCoords(true, calculate).every(function(point) {\n return (point.x >= pointBR.x || point.x <= pointTL.x) &&\n (point.y >= pointBR.y || point.y <= pointTL.y);\n });\n return allPointsAreOutside && this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Method that returns an object with the object edges in it, given the coordinates of the corners\n * @private\n * @param {Object} oCoords Coordinates of the object corners\n */\n _getImageLines: function(oCoords) {\n\n var lines = {\n topline: {\n o: oCoords.tl,\n d: oCoords.tr\n },\n rightline: {\n o: oCoords.tr,\n d: oCoords.br\n },\n bottomline: {\n o: oCoords.br,\n d: oCoords.bl\n },\n leftline: {\n o: oCoords.bl,\n d: oCoords.tl\n }\n };\n\n // // debugging\n // if (this.canvas.contextTop) {\n // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n // }\n\n return lines;\n },\n\n /**\n * Helper method to determine how many cross points are between the 4 object edges\n * and the horizontal line determined by a point on canvas\n * @private\n * @param {fabric.Point} point Point to check\n * @param {Object} lines Coordinates of the object being evaluated\n */\n // remove yi, not used but left code here just in case.\n _findCrossPoints: function(point, lines) {\n var b1, b2, a1, a2, xi, // yi,\n xcount = 0,\n iLine;\n\n for (var lineKey in lines) {\n iLine = lines[lineKey];\n // optimisation 1: line below point. no cross\n if ((iLine.o.y < point.y) && (iLine.d.y < point.y)) {\n continue;\n }\n // optimisation 2: line above point. no cross\n if ((iLine.o.y >= point.y) && (iLine.d.y >= point.y)) {\n continue;\n }\n // optimisation 3: vertical line case\n if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {\n xi = iLine.o.x;\n // yi = point.y;\n }\n // calculate the intersection point\n else {\n b1 = 0;\n b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n a1 = point.y - b1 * point.x;\n a2 = iLine.o.y - b2 * iLine.o.x;\n\n xi = -(a1 - a2) / (b1 - b2);\n // yi = a1 + b1 * xi;\n }\n // dont count xi < point.x cases\n if (xi >= point.x) {\n xcount += 1;\n }\n // optimisation 4: specific for square images\n if (xcount === 2) {\n break;\n }\n }\n return xcount;\n },\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords / .aCoords\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect: function(absolute, calculate) {\n var coords = this.getCoords(absolute, calculate);\n return util.makeBoundingBoxFromPoints(coords);\n },\n\n /**\n * Returns width of an object's bounding box counting transformations\n * before 2.0 it was named getWidth();\n * @return {Number} width value\n */\n getScaledWidth: function() {\n return this._getTransformedDimensions().x;\n },\n\n /**\n * Returns height of an object bounding box counting transformations\n * before 2.0 it was named getHeight();\n * @return {Number} height value\n */\n getScaledHeight: function() {\n return this._getTransformedDimensions().y;\n },\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @private\n * @param {Number} value\n * @return {Number}\n */\n _constrainScale: function(value) {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n }\n else {\n return this.minScaleLimit;\n }\n }\n else if (value === 0) {\n return 0.0001;\n }\n return value;\n },\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scale: function(value) {\n this._set('scaleX', value);\n this._set('scaleY', value);\n return this.setCoords();\n },\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToWidth: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n },\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToHeight: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n },\n\n calcLineCoords: function() {\n var vpt = this.getViewportTransform(),\n padding = this.padding, angle = degreesToRadians(this.angle),\n cos = util.cos(angle), sin = util.sin(angle),\n cosP = cos * padding, sinP = sin * padding, cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP, aCoords = this.calcACoords();\n\n var lineCoords = {\n tl: transformPoint(aCoords.tl, vpt),\n tr: transformPoint(aCoords.tr, vpt),\n bl: transformPoint(aCoords.bl, vpt),\n br: transformPoint(aCoords.br, vpt),\n };\n\n if (padding) {\n lineCoords.tl.x -= cosPMinusSinP;\n lineCoords.tl.y -= cosPSinP;\n lineCoords.tr.x += cosPSinP;\n lineCoords.tr.y -= cosPMinusSinP;\n lineCoords.bl.x -= cosPSinP;\n lineCoords.bl.y += cosPMinusSinP;\n lineCoords.br.x += cosPMinusSinP;\n lineCoords.br.y += cosPSinP;\n }\n\n return lineCoords;\n },\n\n calcOCoords: function() {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n vpt = this.getViewportTransform(),\n startMatrix = multiplyMatrices(vpt, translateMatrix),\n finalMatrix = multiplyMatrices(startMatrix, rotateMatrix),\n finalMatrix = multiplyMatrices(finalMatrix, [1 / vpt[0], 0, 0, 1 / vpt[3], 0, 0]),\n dim = this._calculateCurrentDimensions(),\n coords = {};\n this.forEachControl(function(control, key, fabricObject) {\n coords[key] = control.positionHandler(dim, finalMatrix, fabricObject);\n });\n\n // debug code\n // var canvas = this.canvas;\n // setTimeout(function() {\n // canvas.contextTop.clearRect(0, 0, 700, 700);\n // canvas.contextTop.fillStyle = 'green';\n // Object.keys(coords).forEach(function(key) {\n // var control = coords[key];\n // canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n // });\n // }, 50);\n return coords;\n },\n\n calcACoords: function() {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n finalMatrix = multiplyMatrices(translateMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2, h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix)\n };\n },\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * oCoords are used to find the corners\n * aCoords are used to quickly find an object on the canvas\n * lineCoords are used to quickly find object during pointer events.\n * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n *\n * @param {Boolean} [skipCorners] skip calculation of oCoords.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setCoords: function(skipCorners) {\n this.aCoords = this.calcACoords();\n // in case we are in a group, for how the inner group target check works,\n // lineCoords are exactly aCoords. Since the vpt gets absorbed by the normalized pointer.\n this.lineCoords = this.group ? this.aCoords : this.calcLineCoords();\n if (skipCorners) {\n return this;\n }\n // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n this.oCoords = this.calcOCoords();\n this._setCornerCoords && this._setCornerCoords();\n return this;\n },\n\n /**\n * calculate rotation matrix of an object\n * @return {Array} rotation matrix for the object\n */\n _calcRotateMatrix: function() {\n return util.calcRotateMatrix(this);\n },\n\n /**\n * calculate the translation matrix for an object transform\n * @return {Array} rotation matrix for the object\n */\n _calcTranslateMatrix: function() {\n var center = this.getCenterPoint();\n return [1, 0, 0, 1, center.x, center.y];\n },\n\n transformMatrixKey: function(skipGroup) {\n var sep = '_', prefix = '';\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup) + sep;\n };\n return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY +\n sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.originX + sep + this.originY +\n sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {Array} transform matrix for the object\n */\n calcTransformMatrix: function(skipGroup) {\n var matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n var key = this.transformMatrixKey(skipGroup), cache = this.matrixCache || (this.matrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyMatrices(this.group.calcTransformMatrix(false), matrix);\n }\n cache.key = key;\n cache.value = matrix;\n return matrix;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {Array} transform matrix for the object\n */\n calcOwnMatrix: function() {\n var key = this.transformMatrixKey(true), cache = this.ownMatrixCache || (this.ownMatrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n var tMatrix = this._calcTranslateMatrix(),\n options = {\n angle: this.angle,\n translateX: tMatrix[4],\n translateY: tMatrix[5],\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n };\n cache.key = key;\n cache.value = util.composeMatrix(options);\n return cache.value;\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getNonTransformedDimensions: function() {\n var strokeWidth = this.strokeWidth,\n w = this.width + strokeWidth,\n h = this.height + strokeWidth;\n return { x: w, y: h };\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param {Number} skewX, a value to override current skewX\n * @param {Number} skewY, a value to override current skewY\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getTransformedDimensions: function(skewX, skewY) {\n if (typeof skewX === 'undefined') {\n skewX = this.skewX;\n }\n if (typeof skewY === 'undefined') {\n skewY = this.skewY;\n }\n var dimensions, dimX, dimY,\n noSkew = skewX === 0 && skewY === 0;\n\n if (this.strokeUniform) {\n dimX = this.width;\n dimY = this.height;\n }\n else {\n dimensions = this._getNonTransformedDimensions();\n dimX = dimensions.x;\n dimY = dimensions.y;\n }\n if (noSkew) {\n return this._finalizeDimensions(dimX * this.scaleX, dimY * this.scaleY);\n }\n var bbox = util.sizeAfterTransform(dimX, dimY, {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: skewX,\n skewY: skewY,\n });\n return this._finalizeDimensions(bbox.x, bbox.y);\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param Number width width of the bbox\n * @param Number height height of the bbox\n * @private\n * @return {Object} .x finalized width dimension\n * @return {Object} .y finalized height dimension\n */\n _finalizeDimensions: function(width, height) {\n return this.strokeUniform ?\n { x: width + this.strokeWidth, y: height + this.strokeWidth }\n :\n { x: width, y: height };\n },\n\n /*\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * private\n */\n _calculateCurrentDimensions: function() {\n var vpt = this.getViewportTransform(),\n dim = this._getTransformedDimensions(),\n p = transformPoint(dim, vpt, true);\n return p.scalarAdd(2 * this.padding);\n },\n });\n})();\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Moves an object to the bottom of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendToBack: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendToBack.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.sendToBack(this);\n }\n return this;\n },\n\n /**\n * Moves an object to the top of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringToFront: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringToFront.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.bringToFront(this);\n }\n return this;\n },\n\n /**\n * Moves an object down in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendBackwards: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendBackwards.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.sendBackwards(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object up in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringForward: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringForward.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.bringForward(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {Number} index New position of object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n moveTo: function(index) {\n if (this.group && this.group.type !== 'activeSelection') {\n fabric.StaticCanvas.prototype.moveTo.call(this.group, this, index);\n }\n else if (this.canvas) {\n this.canvas.moveTo(this, index);\n }\n return this;\n }\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n function getSvgColorString(prop, value) {\n if (!value) {\n return prop + ': none; ';\n }\n else if (value.toLive) {\n return prop + ': url(#SVGID_' + value.id + '); ';\n }\n else {\n var color = new fabric.Color(value),\n str = prop + ': ' + color.toRgb() + '; ',\n opacity = color.getAlpha();\n if (opacity !== 1) {\n //change the color in rgb + opacity\n str += prop + '-opacity: ' + opacity.toString() + '; ';\n }\n return str;\n }\n }\n\n var toFixed = fabric.util.toFixed;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n\n var fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none',\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = getSvgColorString('fill', this.fill),\n stroke = getSvgColorString('stroke', this.stroke);\n\n return [\n stroke,\n 'stroke-width: ', strokeWidth, '; ',\n 'stroke-dasharray: ', strokeDashArray, '; ',\n 'stroke-linecap: ', strokeLineCap, '; ',\n 'stroke-dashoffset: ', strokeDashOffset, '; ',\n 'stroke-linejoin: ', strokeLineJoin, '; ',\n 'stroke-miterlimit: ', strokeMiterLimit, '; ',\n fill,\n 'fill-rule: ', fillRule, '; ',\n 'opacity: ', opacity, ';',\n filter,\n visibility\n ].join('');\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles: function(style, useWhiteSpace) {\n var term = '; ';\n var fontFamily = style.fontFamily ?\n 'font-family: ' + (((style.fontFamily.indexOf('\\'') === -1 && style.fontFamily.indexOf('\"') === -1) ?\n '\\'' + style.fontFamily + '\\'' : style.fontFamily)) + term : '';\n var strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '',\n fontFamily = fontFamily,\n fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '',\n fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '',\n fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '',\n fill = style.fill ? getSvgColorString('fill', style.fill) : '',\n stroke = style.stroke ? getSvgColorString('stroke', style.stroke) : '',\n textDecoration = this.getSvgTextDecoration(style),\n deltaY = style.deltaY ? 'baseline-shift: ' + (-style.deltaY) + '; ' : '';\n if (textDecoration) {\n textDecoration = 'text-decoration: ' + textDecoration + term;\n }\n\n return [\n stroke,\n strokeWidth,\n fontFamily,\n fontSize,\n fontStyle,\n fontWeight,\n textDecoration,\n fill,\n deltaY,\n useWhiteSpace ? 'white-space: pre; ' : ''\n ].join('');\n },\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration: function(style) {\n return ['overline', 'underline', 'line-through'].filter(function(decoration) {\n return style[decoration.replace('-', '')];\n }).join(' ');\n },\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter: function() {\n return this.shadow ? 'filter: url(#SVGID_' + this.shadow.id + ');' : '';\n },\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons: function() {\n return [\n this.id ? 'id=\"' + this.id + '\" ' : '',\n this.clipPath ? 'clip-path=\"url(#' + this.clipPath.clipPathId + ')\" ' : '',\n ].join('');\n },\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform: function(full, additionalTransform) {\n var transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = 'transform=\"' + fabric.util.matrixToSVG(transform);\n return svgTransform +\n (additionalTransform || '') + '\" ';\n },\n\n _setSVGBg: function(textBgRects) {\n if (this.backgroundColor) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n }\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var reviver = options.reviver,\n additionalTransform = options.additionalTransform || '',\n commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n },\n\n /**\n * @private\n */\n _createBaseSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var noStyle = options.noStyle,\n reviver = options.reviver,\n styleInfo = noStyle ? '' : 'style=\"' + this.getSvgStyles() + '\" ',\n shadowInfo = options.withShadow ? 'style=\"' + this.getSvgFilter() + '\" ' : '',\n clipPath = this.clipPath,\n vectorEffect = this.strokeUniform ? 'vector-effect=\"non-scaling-stroke\" ' : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke, fill = this.fill, shadow = this.shadow,\n commonPieces, markup = [], clipPathMarkup,\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS'),\n additionalTransform = options.additionalTransform;\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n clipPathMarkup = '\\n' +\n clipPath.toClipPathSVG(reviver) +\n '\\n';\n }\n if (absoluteClipPath) {\n markup.push(\n '\\n'\n );\n }\n markup.push(\n '\\n'\n );\n commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(), ' ',\n additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (fill && fill.toLive) {\n markup.push(fill.toSVG(this));\n }\n if (stroke && stroke.toLive) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n },\n\n addPaintOrder: function() {\n return this.paintFirst !== 'fill' ? ' paint-order=\"' + this.paintFirst + '\" ' : '';\n }\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function() {\n\n var extend = fabric.util.object.extend,\n originalSet = 'stateProperties';\n\n /*\n Depends on `stateProperties`\n */\n function saveProps(origin, destination, props) {\n var tmpObj = { }, deep = true;\n props.forEach(function(prop) {\n tmpObj[prop] = origin[prop];\n });\n\n extend(origin[destination], tmpObj, deep);\n }\n\n function _isEqual(origValue, currentValue, firstPass) {\n if (origValue === currentValue) {\n // if the objects are identical, return\n return true;\n }\n else if (Array.isArray(origValue)) {\n if (!Array.isArray(currentValue) || origValue.length !== currentValue.length) {\n return false;\n }\n for (var i = 0, len = origValue.length; i < len; i++) {\n if (!_isEqual(origValue[i], currentValue[i])) {\n return false;\n }\n }\n return true;\n }\n else if (origValue && typeof origValue === 'object') {\n var keys = Object.keys(origValue), key;\n if (!currentValue ||\n typeof currentValue !== 'object' ||\n (!firstPass && keys.length !== Object.keys(currentValue).length)\n ) {\n return false;\n }\n for (var i = 0, len = keys.length; i < len; i++) {\n key = keys[i];\n // since clipPath is in the statefull cache list and the clipPath objects\n // would be iterated as an object, this would lead to possible infinite recursion\n // we do not want to compare those.\n if (key === 'canvas' || key === 'group') {\n continue;\n }\n if (!_isEqual(origValue[key], currentValue[key])) {\n return false;\n }\n }\n return true;\n }\n }\n\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Returns true if object state (one of its state properties) was changed\n * @param {String} [propertySet] optional name for the set of property we want to save\n * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called\n */\n hasStateChanged: function(propertySet) {\n propertySet = propertySet || originalSet;\n var dashedPropertySet = '_' + propertySet;\n if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) {\n return true;\n }\n return !_isEqual(this[dashedPropertySet], this, true);\n },\n\n /**\n * Saves state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n saveState: function(options) {\n var propertySet = options && options.propertySet || originalSet,\n destination = '_' + propertySet;\n if (!this[destination]) {\n return this.setupState(options);\n }\n saveProps(this, destination, this[propertySet]);\n if (options && options.stateProperties) {\n saveProps(this, destination, options.stateProperties);\n }\n return this;\n },\n\n /**\n * Setups state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n setupState: function(options) {\n options = options || { };\n var propertySet = options.propertySet || originalSet;\n options.propertySet = propertySet;\n this['_' + propertySet] = { };\n this.saveState(options);\n return this;\n }\n });\n})();\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Determines which corner has been clicked\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found\n */\n _findTargetCorner: function(pointer, forTouch) {\n // objects in group, anykind, are not self modificable,\n // must not return an hovered corner.\n if (!this.hasControls || this.group || (!this.canvas || this.canvas._activeObject !== this)) {\n return false;\n }\n\n var ex = pointer.x,\n ey = pointer.y,\n xPoints,\n lines, keys = Object.keys(this.oCoords),\n j = keys.length - 1, i;\n this.__corner = 0;\n\n // cycle in reverse order so we pick first the one on top\n for (; j >= 0; j--) {\n i = keys[j];\n if (!this.isControlVisible(i)) {\n continue;\n }\n\n lines = this._getImageLines(forTouch ? this.oCoords[i].touchCorner : this.oCoords[i].corner);\n // // debugging\n //\n // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n\n xPoints = this._findCrossPoints({ x: ex, y: ey }, lines);\n if (xPoints !== 0 && xPoints % 2 === 1) {\n this.__corner = i;\n return i;\n }\n }\n return false;\n },\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the object that is calling the iterator and the control's key\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl: function(fn) {\n for (var i in this.controls) {\n fn(this.controls[i], i, this);\n };\n },\n\n /**\n * Sets the coordinates of the draggable boxes in the corners of\n * the image used to scale/rotate it.\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @private\n */\n _setCornerCoords: function() {\n var coords = this.oCoords;\n\n for (var control in coords) {\n var controlObject = this.controls[control];\n coords[control].corner = controlObject.calcCornerCoords(\n this.angle, this.cornerSize, coords[control].x, coords[control].y, false);\n coords[control].touchCorner = controlObject.calcCornerCoords(\n this.angle, this.touchCornerSize, coords[control].x, coords[control].y, true);\n }\n },\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawSelectionBackground: function(ctx) {\n if (!this.selectionBackgroundColor ||\n (this.canvas && !this.canvas.interactive) ||\n (this.canvas && this.canvas._activeObject !== this)\n ) {\n return this;\n }\n ctx.save();\n var center = this.getCenterPoint(), wh = this._calculateCurrentDimensions(),\n vpt = this.canvas.viewportTransform;\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBorders: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n var wh = this._calculateCurrentDimensions(),\n strokeWidth = this.borderScaleFactor,\n width = wh.x + strokeWidth,\n height = wh.y + strokeWidth,\n hasControls = typeof styleOverride.hasControls !== 'undefined' ?\n styleOverride.hasControls : this.hasControls,\n shouldStroke = false;\n\n ctx.save();\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n if (hasControls) {\n ctx.beginPath();\n this.forEachControl(function(control, key, fabricObject) {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(fabricObject, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * width, control.y * height);\n ctx.lineTo(\n control.x * width + control.offsetX,\n control.y * height + control.offsetY\n );\n }\n });\n if (shouldStroke) {\n ctx.stroke();\n }\n }\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box when it is inside a group.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBordersInGroup: function(ctx, options, styleOverride) {\n styleOverride = styleOverride || {};\n var bbox = fabric.util.sizeAfterTransform(this.width, this.height, options),\n strokeWidth = this.strokeWidth,\n strokeUniform = this.strokeUniform,\n borderScaleFactor = this.borderScaleFactor,\n width =\n bbox.x + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleX) + borderScaleFactor,\n height =\n bbox.y + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleY) + borderScaleFactor;\n ctx.save();\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n ctx.restore();\n return this;\n },\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawControls: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n ctx.save();\n var retinaScaling = this.canvas.getRetinaScaling(), matrix, p;\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\n }\n this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray);\n this.setCoords();\n if (this.group) {\n // fabricJS does not really support drawing controls inside groups,\n // this piece of code here helps having at least the control in places.\n // If an application needs to show some objects as selected because of some UI state\n // can still call Object._renderControls() on any object they desire, independently of groups.\n // using no padding, circular controls and hiding the rotating cursor is higly suggested,\n matrix = this.group.calcTransformMatrix();\n }\n this.forEachControl(function(control, key, fabricObject) {\n p = fabricObject.oCoords[key];\n if (control.getVisibility(fabricObject, key)) {\n if (matrix) {\n p = fabric.util.transformPoint(p, matrix);\n }\n control.render(ctx, p.x, p.y, styleOverride, fabricObject);\n }\n });\n ctx.restore();\n\n return this;\n },\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @returns {Boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible: function(controlKey) {\n return this.controls[controlKey] && this.controls[controlKey].getVisibility(this, controlKey);\n },\n\n /**\n * Sets the visibility of the specified control.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlVisible: function(controlKey, visible) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n return this;\n },\n\n /**\n * Sets the visibility state of object controls.\n * @param {Object} [options] Options object\n * @param {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n * @param {Boolean} [options.br] true to enable the bottom-right control, false to disable it\n * @param {Boolean} [options.mb] true to enable the middle-bottom control, false to disable it\n * @param {Boolean} [options.ml] true to enable the middle-left control, false to disable it\n * @param {Boolean} [options.mr] true to enable the middle-right control, false to disable it\n * @param {Boolean} [options.mt] true to enable the middle-top control, false to disable it\n * @param {Boolean} [options.tl] true to enable the top-left control, false to disable it\n * @param {Boolean} [options.tr] true to enable the top-right control, false to disable it\n * @param {Boolean} [options.mtr] true to enable the middle-top-rotate control, false to disable it\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlsVisibility: function(options) {\n options || (options = { });\n\n for (var p in options) {\n this.setControlVisible(p, options[p]);\n }\n return this;\n },\n\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onDeselect: function() {\n // implemented by sub-classes, as needed.\n },\n\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onSelect: function() {\n // implemented by sub-classes, as needed.\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Animation duration (in ms) for fx* methods\n * @type Number\n * @default\n */\n FX_DURATION: 500,\n\n /**\n * Centers object horizontally with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.AnimationContext} context\n */\n fxCenterObjectH: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n return fabric.util.animate({\n target: this,\n startValue: object.left,\n endValue: this.getCenterPoint().x,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('left', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n },\n\n /**\n * Centers object vertically with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.AnimationContext} context\n */\n fxCenterObjectV: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n return fabric.util.animate({\n target: this,\n startValue: object.top,\n endValue: this.getCenterPoint().y,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('top', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n },\n\n /**\n * Same as `fabric.Canvas#remove` but animated\n * @param {fabric.Object} object Object to remove\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.AnimationContext} context\n */\n fxRemove: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n return fabric.util.animate({\n target: this,\n startValue: object.opacity,\n endValue: 0,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('opacity', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function () {\n _this.remove(object);\n onComplete();\n }\n });\n }\n});\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Animates object's properties\n * @param {String|Object} property Property to animate (if string) or properties to animate (if object)\n * @param {Number|Object} value Value to animate property to (if string was given first) or options object\n * @return {fabric.Object} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @return {fabric.AnimationContext | fabric.AnimationContext[]} animation context (or an array if passed multiple properties)\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n *\n * As string — one property\n *\n * object.animate('left', ...);\n * object.animate('left', { duration: ... });\n *\n */\n animate: function () {\n if (arguments[0] && typeof arguments[0] === 'object') {\n var propsToAnimate = [], prop, skipCallbacks, out = [];\n for (prop in arguments[0]) {\n propsToAnimate.push(prop);\n }\n for (var i = 0, len = propsToAnimate.length; i < len; i++) {\n prop = propsToAnimate[i];\n skipCallbacks = i !== len - 1;\n out.push(this._animate(prop, arguments[0][prop], arguments[1], skipCallbacks));\n }\n return out;\n }\n else {\n return this._animate.apply(this, arguments);\n }\n },\n\n /**\n * @private\n * @param {String} property Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n * @param {Boolean} [skipCallbacks] When true, callbacks like onchange and oncomplete are not invoked\n */\n _animate: function(property, to, options, skipCallbacks) {\n var _this = this, propPair;\n\n to = to.toString();\n\n if (!options) {\n options = { };\n }\n else {\n options = fabric.util.object.clone(options);\n }\n\n if (~property.indexOf('.')) {\n propPair = property.split('.');\n }\n\n var propIsColor =\n _this.colorProperties.indexOf(property) > -1 ||\n (propPair && _this.colorProperties.indexOf(propPair[1]) > -1);\n\n var currentValue = propPair\n ? this.get(propPair[0])[propPair[1]]\n : this.get(property);\n\n if (!('from' in options)) {\n options.from = currentValue;\n }\n\n if (!propIsColor) {\n if (~to.indexOf('=')) {\n to = currentValue + parseFloat(to.replace('=', ''));\n }\n else {\n to = parseFloat(to);\n }\n }\n\n var _options = {\n target: this,\n startValue: options.from,\n endValue: to,\n byValue: options.by,\n easing: options.easing,\n duration: options.duration,\n abort: options.abort && function(value, valueProgress, timeProgress) {\n return options.abort.call(_this, value, valueProgress, timeProgress);\n },\n onChange: function (value, valueProgress, timeProgress) {\n if (propPair) {\n _this[propPair[0]][propPair[1]] = value;\n }\n else {\n _this.set(property, value);\n }\n if (skipCallbacks) {\n return;\n }\n options.onChange && options.onChange(value, valueProgress, timeProgress);\n },\n onComplete: function (value, valueProgress, timeProgress) {\n if (skipCallbacks) {\n return;\n }\n\n _this.setCoords();\n options.onComplete && options.onComplete(value, valueProgress, timeProgress);\n }\n };\n\n if (propIsColor) {\n return fabric.util.animateColor(_options.startValue, _options.endValue, _options.duration, _options);\n }\n else {\n return fabric.util.animate(_options);\n }\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 };\n\n if (fabric.Line) {\n fabric.warn('fabric.Line is already defined');\n return;\n }\n\n /**\n * Line class\n * @class fabric.Line\n * @extends fabric.Object\n * @see {@link fabric.Line#initialize} for constructor definition\n */\n fabric.Line = fabric.util.createClass(fabric.Object, /** @lends fabric.Line.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'line',\n\n /**\n * x value or first line edge\n * @type Number\n * @default\n */\n x1: 0,\n\n /**\n * y value or first line edge\n * @type Number\n * @default\n */\n y1: 0,\n\n /**\n * x value or second line edge\n * @type Number\n * @default\n */\n x2: 0,\n\n /**\n * y value or second line edge\n * @type Number\n * @default\n */\n y2: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('x1', 'x2', 'y1', 'y2'),\n\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {fabric.Line} thisArg\n */\n initialize: function(points, options) {\n if (!points) {\n points = [0, 0, 0, 0];\n }\n\n this.callSuper('initialize', options);\n\n this.set('x1', points[0]);\n this.set('y1', points[1]);\n this.set('x2', points[2]);\n this.set('y2', points[3]);\n\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n\n this.width = Math.abs(this.x2 - this.x1);\n this.height = Math.abs(this.y2 - this.y1);\n\n this.left = 'left' in options\n ? options.left\n : this._getLeftToOriginX();\n\n this.top = 'top' in options\n ? options.top\n : this._getTopToOriginY();\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n if (typeof coordProps[key] !== 'undefined') {\n this._setWidthHeight();\n }\n return this;\n },\n\n /**\n * @private\n * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line.\n */\n _getLeftToOriginX: makeEdgeToOriginGetter(\n { // property names\n origin: 'originX',\n axis1: 'x1',\n axis2: 'x2',\n dimension: 'width'\n },\n { // possible values of origin\n nearest: 'left',\n center: 'center',\n farthest: 'right'\n }\n ),\n\n /**\n * @private\n * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line.\n */\n _getTopToOriginY: makeEdgeToOriginGetter(\n { // property names\n origin: 'originY',\n axis1: 'y1',\n axis2: 'y2',\n dimension: 'height'\n },\n { // possible values of origin\n nearest: 'top',\n center: 'center',\n farthest: 'bottom'\n }\n ),\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n\n\n var p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n var origStrokeStyle = ctx.strokeStyle;\n ctx.strokeStyle = this.stroke || ctx.fillStyle;\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return {\n x: (this.x1 + this.x2) / 2,\n y: (this.y1 + this.y2) / 2,\n };\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), this.calcLinePoints());\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions: function() {\n var dim = this.callSuper('_getNonTransformedDimensions');\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n },\n\n /**\n * Recalculates line points given width and height\n * @private\n */\n calcLinePoints: function() {\n var xMult = this.x1 <= this.x2 ? -1 : 1,\n yMult = this.y1 <= this.y2 ? -1 : 1,\n x1 = (xMult * this.width * 0.5),\n y1 = (yMult * this.height * 0.5),\n x2 = (xMult * this.width * -0.5),\n y2 = (yMult * this.height * -0.5);\n\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var p = this.calcLinePoints();\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement})\n * @static\n * @memberOf fabric.Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' '));\n\n /**\n * Returns fabric.Line instance from an SVG element\n * @static\n * @memberOf fabric.Line\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n fabric.Line.fromElement = function(element, callback, options) {\n options = options || { };\n var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES),\n points = [\n parsedAttributes.x1 || 0,\n parsedAttributes.y1 || 0,\n parsedAttributes.x2 || 0,\n parsedAttributes.y2 || 0\n ];\n callback(new fabric.Line(points, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Line instance from an object representation\n * @static\n * @memberOf fabric.Line\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Line.fromObject = function(object, callback) {\n function _callback(instance) {\n delete instance.points;\n callback && callback(instance);\n };\n var options = clone(object, true);\n options.points = [object.x1, object.y1, object.x2, object.y2];\n fabric.Object._fromObject('Line', options, _callback, 'points');\n };\n\n /**\n * Produces a function that calculates distance from canvas edge to Line origin.\n */\n function makeEdgeToOriginGetter(propertyNames, originValues) {\n var origin = propertyNames.origin,\n axis1 = propertyNames.axis1,\n axis2 = propertyNames.axis2,\n dimension = propertyNames.dimension,\n nearest = originValues.nearest,\n center = originValues.center,\n farthest = originValues.farthest;\n\n return function() {\n switch (this.get(origin)) {\n case nearest:\n return Math.min(this.get(axis1), this.get(axis2));\n case center:\n return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));\n case farthest:\n return Math.max(this.get(axis1), this.get(axis2));\n }\n };\n\n }\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n degreesToRadians = fabric.util.degreesToRadians;\n\n if (fabric.Circle) {\n fabric.warn('fabric.Circle is already defined.');\n return;\n }\n\n /**\n * Circle class\n * @class fabric.Circle\n * @extends fabric.Object\n * @see {@link fabric.Circle#initialize} for constructor definition\n */\n fabric.Circle = fabric.util.createClass(fabric.Object, /** @lends fabric.Circle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'circle',\n\n /**\n * Radius of this circle\n * @type Number\n * @default\n */\n radius: 0,\n\n /**\n * degrees of start of the circle.\n * probably will change to degrees in next major version\n * @type Number 0 - 359\n * @default 0\n */\n startAngle: 0,\n\n /**\n * End angle of the circle\n * probably will change to degrees in next major version\n * @type Number 1 - 360\n * @default 360\n */\n endAngle: 360,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius', 'startAngle', 'endAngle'),\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Circle} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString, x = 0, y = 0,\n angle = (this.endAngle - this.startAngle) % 360;\n\n if (angle === 0) {\n svgString = [\n '\\n'\n ];\n }\n else {\n var start = degreesToRadians(this.startAngle),\n end = degreesToRadians(this.endAngle),\n radius = this.radius,\n startX = fabric.util.cos(start) * radius,\n startY = fabric.util.sin(start) * radius,\n endX = fabric.util.cos(end) * radius,\n endY = fabric.util.sin(end) * radius,\n largeFlag = angle > 180 ? '1' : '0';\n svgString = [\n '\\n'\n ];\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n degreesToRadians(this.startAngle),\n degreesToRadians(this.endAngle),\n false\n );\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX: function() {\n return this.get('radius') * this.get('scaleX');\n },\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY: function() {\n return this.get('radius') * this.get('scaleY');\n },\n\n /**\n * Sets radius of an object (and updates width accordingly)\n * @return {fabric.Circle} thisArg\n */\n setRadius: function(value) {\n this.radius = value;\n return this.set('width', value * 2).set('height', value * 2);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Circle.fromElement})\n * @static\n * @memberOf fabric.Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' '));\n\n /**\n * Returns {@link fabric.Circle} instance from an SVG element\n * @static\n * @memberOf fabric.Circle\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @param {Object} [options] Options object\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n fabric.Circle.fromElement = function(element, callback) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES);\n\n if (!isValidRadius(parsedAttributes)) {\n throw new Error('value of `r` attribute is required and can not be negative');\n }\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius;\n callback(new fabric.Circle(parsedAttributes));\n };\n\n /**\n * @private\n */\n function isValidRadius(attributes) {\n return (('radius' in attributes) && (attributes.radius >= 0));\n }\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Circle} instance from an object representation\n * @static\n * @memberOf fabric.Circle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {void}\n */\n fabric.Circle.fromObject = function(object, callback) {\n fabric.Object._fromObject('Circle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Triangle) {\n fabric.warn('fabric.Triangle is already defined');\n return;\n }\n\n /**\n * Triangle class\n * @class fabric.Triangle\n * @extends fabric.Object\n * @return {fabric.Triangle} thisArg\n * @see {@link fabric.Triangle#initialize} for constructor definition\n */\n fabric.Triangle = fabric.util.createClass(fabric.Object, /** @lends fabric.Triangle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'triangle',\n\n /**\n * Width is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n width: 100,\n\n /**\n * Height is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n height: 100,\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = [\n -widthBy2 + ' ' + heightBy2,\n '0 ' + -heightBy2,\n widthBy2 + ' ' + heightBy2\n ].join(',');\n return [\n ''\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Triangle} instance from an object representation\n * @static\n * @memberOf fabric.Triangle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Triangle.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Triangle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n piBy2 = Math.PI * 2;\n\n if (fabric.Ellipse) {\n fabric.warn('fabric.Ellipse is already defined.');\n return;\n }\n\n /**\n * Ellipse class\n * @class fabric.Ellipse\n * @extends fabric.Object\n * @return {fabric.Ellipse} thisArg\n * @see {@link fabric.Ellipse#initialize} for constructor definition\n */\n fabric.Ellipse = fabric.util.createClass(fabric.Object, /** @lends fabric.Ellipse.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'ellipse',\n\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {fabric.Ellipse} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this.set('rx', options && options.rx || 0);\n this.set('ry', options && options.ry || 0);\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Ellipse} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n switch (key) {\n\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n\n }\n return this;\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx: function() {\n return this.get('rx') * this.get('scaleX');\n },\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy: function() {\n return this.get('ry') * this.get('scaleY');\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(\n 0,\n 0,\n this.rx,\n 0,\n piBy2,\n false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Ellipse.fromElement})\n * @static\n * @memberOf fabric.Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' '));\n\n /**\n * Returns {@link fabric.Ellipse} instance from an SVG element\n * @static\n * @memberOf fabric.Ellipse\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @return {fabric.Ellipse}\n */\n fabric.Ellipse.fromElement = function(element, callback) {\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES);\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n callback(new fabric.Ellipse(parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Ellipse} instance from an object representation\n * @static\n * @memberOf fabric.Ellipse\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {void}\n */\n fabric.Ellipse.fromObject = function(object, callback) {\n fabric.Object._fromObject('Ellipse', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend;\n\n if (fabric.Rect) {\n fabric.warn('fabric.Rect is already defined');\n return;\n }\n\n /**\n * Rectangle class\n * @class fabric.Rect\n * @extends fabric.Object\n * @return {fabric.Rect} thisArg\n * @see {@link fabric.Rect#initialize} for constructor definition\n */\n fabric.Rect = fabric.util.createClass(fabric.Object, /** @lends fabric.Rect.prototype */ {\n\n /**\n * List of properties to consider when checking if state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('rx', 'ry'),\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'rect',\n\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this._initRxRy();\n },\n\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy: function() {\n if (this.rx && !this.ry) {\n this.ry = this.rx;\n }\n else if (this.ry && !this.rx) {\n this.rx = this.ry;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n\n // 1x1 case (used in spray brush) optimization was removed because\n // with caching and higher zoom level this makes more damage than help\n\n var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0,\n ry = this.ry ? Math.min(this.ry, this.height / 2) : 0,\n w = this.width,\n h = this.height,\n x = -this.width / 2,\n y = -this.height / 2,\n isRounded = rx !== 0 || ry !== 0,\n /* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\n k = 1 - 0.5522847498;\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry);\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h);\n\n ctx.lineTo(x + rx, y + h);\n isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry);\n\n ctx.lineTo(x, y + ry);\n isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var x = -this.width / 2, y = -this.height / 2;\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`)\n * @static\n * @memberOf fabric.Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' '));\n\n /**\n * Returns {@link fabric.Rect} instance from an SVG element\n * @static\n * @memberOf fabric.Rect\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Rect.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options = options || { };\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES);\n parsedAttributes.left = parsedAttributes.left || 0;\n parsedAttributes.top = parsedAttributes.top || 0;\n parsedAttributes.height = parsedAttributes.height || 0;\n parsedAttributes.width = parsedAttributes.width || 0;\n var rect = new fabric.Rect(extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n rect.visible = rect.visible && rect.width > 0 && rect.height > 0;\n callback(rect);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Rect} instance from an object representation\n * @static\n * @memberOf fabric.Rect\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Rect instance is created\n */\n fabric.Rect.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Rect', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n toFixed = fabric.util.toFixed,\n projectStrokeOnPoints = fabric.util.projectStrokeOnPoints;\n\n if (fabric.Polyline) {\n fabric.warn('fabric.Polyline is already defined');\n return;\n }\n\n /**\n * Polyline class\n * @class fabric.Polyline\n * @extends fabric.Object\n * @see {@link fabric.Polyline#initialize} for constructor definition\n */\n fabric.Polyline = fabric.util.createClass(fabric.Object, /** @lends fabric.Polyline.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polyline',\n\n /**\n * Points array\n * @type Array\n * @default\n */\n points: null,\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated\n * @type Boolean\n * @default false\n */\n exactBoundingBox: false,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('points'),\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {fabric.Polyline} thisArg\n * @example\n * var poly = new fabric.Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n initialize: function(points, options) {\n options = options || {};\n this.points = points || [];\n this.callSuper('initialize', options);\n this._setPositionDimensions(options);\n },\n\n /**\n * @private\n */\n _projectStrokeOnPoints: function () {\n return projectStrokeOnPoints(this.points, this, true);\n },\n\n _setPositionDimensions: function(options) {\n var calcDim = this._calcDimensions(options), correctLeftTop,\n correctSize = this.exactBoundingBox ? this.strokeWidth : 0;\n this.width = calcDim.width - correctSize;\n this.height = calcDim.height - correctSize;\n if (!options.fromSVG) {\n correctLeftTop = this.translateToGivenOrigin(\n {\n // this looks bad, but is one way to keep it optional for now.\n x: calcDim.left - this.strokeWidth / 2 + correctSize / 2,\n y: calcDim.top - this.strokeWidth / 2 + correctSize / 2\n },\n 'left',\n 'top',\n this.originX,\n this.originY\n );\n }\n if (typeof options.left === 'undefined') {\n this.left = options.fromSVG ? calcDim.left : correctLeftTop.x;\n }\n if (typeof options.top === 'undefined') {\n this.top = options.fromSVG ? calcDim.top : correctLeftTop.y;\n }\n this.pathOffset = {\n x: calcDim.left + this.width / 2 + correctSize / 2,\n y: calcDim.top + this.height / 2 + correctSize / 2\n };\n },\n\n /**\n * Calculate the polygon min and max point from points array,\n * returning an object with left, top, width, height to measure the\n * polygon size\n * @return {Object} object.left X coordinate of the polygon leftmost point\n * @return {Object} object.top Y coordinate of the polygon topmost point\n * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point\n * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point\n * @private\n */\n _calcDimensions: function() {\n\n var points = this.exactBoundingBox ? this._projectStrokeOnPoints() : this.points,\n minX = min(points, 'x') || 0,\n minY = min(points, 'y') || 0,\n maxX = max(points, 'x') || 0,\n maxY = max(points, 'y') || 0,\n width = (maxX - minX),\n height = (maxY - minY);\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height,\n };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n points: this.points.concat()\n });\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n for (var i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' '\n );\n }\n return [\n '<' + this.type + ' ', 'COMMON_PARTS',\n 'points=\"', points.join(''),\n '\" />\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n commonRender: function(ctx) {\n var point, len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return false;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (var i = 0; i < len; i++) {\n point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n return true;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.get('points').length;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement})\n * @static\n * @memberOf fabric.Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns fabric.Polyline instance from an SVG element\n * @static\n * @memberOf fabric.Polyline\n * @param {SVGElement} element Element to parser\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polyline.fromElementGenerator = function(_class) {\n return function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options || (options = { });\n\n var points = fabric.parsePointsAttribute(element.getAttribute('points')),\n parsedAttributes = fabric.parseAttributes(element, fabric[_class].ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric[_class](points, extend(parsedAttributes, options)));\n };\n };\n\n fabric.Polyline.fromElement = fabric.Polyline.fromElementGenerator('Polyline');\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polyline instance from an object representation\n * @static\n * @memberOf fabric.Polyline\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Polyline.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Polyline', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {}),\n projectStrokeOnPoints = fabric.util.projectStrokeOnPoints;\n\n if (fabric.Polygon) {\n fabric.warn('fabric.Polygon is already defined');\n return;\n }\n\n /**\n * Polygon class\n * @class fabric.Polygon\n * @extends fabric.Polyline\n * @see {@link fabric.Polygon#initialize} for constructor definition\n */\n fabric.Polygon = fabric.util.createClass(fabric.Polyline, /** @lends fabric.Polygon.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polygon',\n\n /**\n * @private\n */\n _projectStrokeOnPoints: function () {\n return projectStrokeOnPoints(this.points, this);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n ctx.closePath();\n this._renderPaintInOrder(ctx);\n },\n\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Polygon.fromElement`)\n * @static\n * @memberOf fabric.Polygon\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement\n */\n fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns {@link fabric.Polygon} instance from an SVG element\n * @static\n * @memberOf fabric.Polygon\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polygon.fromElement = fabric.Polyline.fromElementGenerator('Polygon');\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polygon instance from an object representation\n * @static\n * @memberOf fabric.Polygon\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n * @return {void}\n */\n fabric.Polygon.fromObject = function(object, callback) {\n fabric.Object._fromObject('Polygon', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed;\n\n if (fabric.Path) {\n fabric.warn('fabric.Path is already defined');\n return;\n }\n\n /**\n * Path class\n * @class fabric.Path\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#path_and_pathgroup}\n * @see {@link fabric.Path#initialize} for constructor definition\n */\n fabric.Path = fabric.util.createClass(fabric.Object, /** @lends fabric.Path.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'path',\n\n /**\n * Array of path points\n * @type Array\n * @default\n */\n path: null,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('path', 'fillRule'),\n\n stateProperties: fabric.Object.prototype.stateProperties.concat('path'),\n\n /**\n * Constructor\n * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Object} [options] Options object\n * @return {fabric.Path} thisArg\n */\n initialize: function (path, options) {\n options = clone(options || {});\n delete options.path;\n this.callSuper('initialize', options);\n this._setPath(path || [], options);\n },\n\n /**\n * @private\n * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Object} [options] Options object\n */\n _setPath: function (path, options) {\n this.path = fabric.util.makePathSimpler(\n Array.isArray(path) ? path : fabric.util.parsePath(path)\n );\n\n fabric.Polyline.prototype._setPositionDimensions.call(this, options || {});\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands: function(ctx) {\n var current, // current instruction\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n controlX = 0, // current control point x\n controlY = 0, // current control point y\n l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n ctx.bezierCurveTo(\n current[1] + l,\n current[2] + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n current[1] + l,\n current[2] + t,\n current[3] + l,\n current[4] + t\n );\n x = current[3];\n y = current[4];\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n ctx.closePath();\n break;\n }\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render: function(ctx) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n path: this.path.map(function(item) { return item.slice(); }),\n });\n },\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var o = this.toObject(['sourcePath'].concat(propertiesToInclude));\n if (o.sourcePath) {\n delete o.path;\n }\n return o;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var path = fabric.util.joinPath(this.path);\n return [\n '\\n'\n ];\n },\n\n _getOffsetTransform: function() {\n var digits = fabric.Object.NUM_FRACTION_DIGITS;\n return ' translate(' + toFixed(-this.pathOffset.x, digits) + ', ' +\n toFixed(-this.pathOffset.y, digits) + ')';\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return '\\t' + this._createBaseClipPathSVGMarkup(\n this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform }\n );\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform });\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns number representation of an instance complexity\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.path.length;\n },\n\n /**\n * @private\n */\n _calcDimensions: function() {\n\n var aX = [],\n aY = [],\n current, // current instruction\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n bounds;\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n bounds = [];\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds = fabric.util.getBoundsOfCurve(x, y,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n x = current[5];\n y = current[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds = fabric.util.getBoundsOfCurve(x, y,\n current[1],\n current[2],\n current[1],\n current[2],\n current[3],\n current[4]\n );\n x = current[3];\n y = current[4];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n bounds.forEach(function (point) {\n aX.push(point.x);\n aY.push(point.y);\n });\n aX.push(x);\n aY.push(y);\n }\n\n var minX = min(aX) || 0,\n minY = min(aY) || 0,\n maxX = max(aX) || 0,\n maxY = max(aY) || 0,\n deltaX = maxX - minX,\n deltaY = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: deltaX,\n height: deltaY\n };\n }\n });\n\n /**\n * Creates an instance of fabric.Path from an object\n * @static\n * @memberOf fabric.Path\n * @param {Object} object\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Path.fromObject = function(object, callback) {\n if (typeof object.sourcePath === 'string') {\n var pathUrl = object.sourcePath;\n fabric.loadSVGFromURL(pathUrl, function (elements) {\n var path = elements[0];\n path.setOptions(object);\n if (object.clipPath) {\n fabric.util.enlivenObjects([object.clipPath], function(elivenedObjects) {\n path.clipPath = elivenedObjects[0];\n callback && callback(path);\n });\n }\n else {\n callback && callback(path);\n }\n });\n }\n else {\n fabric.Object._fromObject('Path', object, callback, 'path');\n }\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Path.fromElement`)\n * @static\n * @memberOf fabric.Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']);\n\n /**\n * Creates an instance of fabric.Path from an SVG element\n * @static\n * @memberOf fabric.Path\n * @param {SVGElement} element to parse\n * @param {Function} callback Callback to invoke when an fabric.Path instance is created\n * @param {Object} [options] Options object\n * @param {Function} [callback] Options callback invoked after parsing is finished\n */\n fabric.Path.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max;\n\n if (fabric.Group) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.Group\n * @extends fabric.Object\n * @mixes fabric.Collection\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.Group#initialize} for constructor definition\n */\n fabric.Group = fabric.util.createClass(fabric.Object, fabric.Collection, /** @lends fabric.Group.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'group',\n\n /**\n * Width of stroke\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * Indicates if click, mouseover, mouseout events & hoverCursor should also check for subtargets\n * @type Boolean\n * @default\n */\n subTargetCheck: false,\n\n /**\n * Groups are container, do not render anything on theyr own, ence no cache properties\n * @type Array\n * @default\n */\n cacheProperties: [],\n\n /**\n * setOnGroup is a method used for TextBox that is no more used since 2.0.0 The behavior is still\n * available setting this boolean to true.\n * @type Boolean\n * @since 2.0.0\n * @default\n */\n useSetOnGroup: false,\n\n /**\n * Constructor\n * @param {Object} objects Group objects\n * @param {Object} [options] Options object\n * @param {Boolean} [isAlreadyGrouped] if true, objects have been grouped already.\n * @return {Object} thisArg\n */\n initialize: function(objects, options, isAlreadyGrouped) {\n options = options || {};\n this._objects = [];\n // if objects enclosed in a group have been grouped already,\n // we cannot change properties of objects.\n // Thus we need to set options to group without objects,\n isAlreadyGrouped && this.callSuper('initialize', options);\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (!isAlreadyGrouped) {\n var center = options && options.centerPoint;\n // we want to set origins before calculating the bounding box.\n // so that the topleft can be set with that in mind.\n // if specific top and left are passed, are overwritten later\n // with the callSuper('initialize', options)\n if (options.originX !== undefined) {\n this.originX = options.originX;\n }\n if (options.originY !== undefined) {\n this.originY = options.originY;\n }\n // if coming from svg i do not want to calc bounds.\n // i assume width and height are passed along options\n center || this._calcBounds();\n this._updateObjectsCoords(center);\n delete options.centerPoint;\n this.callSuper('initialize', options);\n }\n else {\n this._updateObjectsACoords();\n }\n\n this.setCoords();\n },\n\n /**\n * @private\n */\n _updateObjectsACoords: function() {\n var skipControls = true;\n for (var i = this._objects.length; i--; ){\n this._objects[i].setCoords(skipControls);\n }\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsCoords: function(center) {\n var center = center || this.getCenterPoint();\n for (var i = this._objects.length; i--; ){\n this._updateObjectCoords(this._objects[i], center);\n }\n },\n\n /**\n * @private\n * @param {Object} object\n * @param {fabric.Point} center, current center of group.\n */\n _updateObjectCoords: function(object, center) {\n var objectLeft = object.left,\n objectTop = object.top,\n skipControls = true;\n\n object.set({\n left: objectLeft - center.x,\n top: objectTop - center.y\n });\n object.group = this;\n object.setCoords(skipControls);\n },\n\n /**\n * Returns string represenation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Adds an object to a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n addWithUpdate: function(object) {\n var nested = !!this.group;\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n if (object) {\n if (nested) {\n // if this group is inside another group, we need to pre transform the object\n fabric.util.removeTransformFromObject(object, this.group.calcTransformMatrix());\n }\n this._objects.push(object);\n object.group = this;\n object._set('canvas', this.canvas);\n }\n this._calcBounds();\n this._updateObjectsCoords();\n this.dirty = true;\n if (nested) {\n this.group.addWithUpdate();\n }\n else {\n this.setCoords();\n }\n return this;\n },\n\n /**\n * Removes an object from a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n removeWithUpdate: function(object) {\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n\n this.remove(object);\n this._calcBounds();\n this._updateObjectsCoords();\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * @private\n */\n _onObjectAdded: function(object) {\n this.dirty = true;\n object.group = this;\n object._set('canvas', this.canvas);\n },\n\n /**\n * @private\n */\n _onObjectRemoved: function(object) {\n this.dirty = true;\n delete object.group;\n },\n\n /**\n * @private\n */\n _set: function(key, value) {\n var i = this._objects.length;\n if (this.useSetOnGroup) {\n while (i--) {\n this._objects[i].setOnGroup(key, value);\n }\n }\n if (key === 'canvas') {\n while (i--) {\n this._objects[i]._set(key, value);\n }\n }\n fabric.Object.prototype._set.call(this, key, value);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var _includeDefaultValues = this.includeDefaultValues;\n var objsToObject = this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n var obj = fabric.Object.prototype.toObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Returns object representation of an instance, in dataless mode.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var objsToObject, sourcePath = this.sourcePath;\n if (sourcePath) {\n objsToObject = sourcePath;\n }\n else {\n var _includeDefaultValues = this.includeDefaultValues;\n objsToObject = this._objects.map(function(obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toDatalessObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n }\n var obj = fabric.Object.prototype.toDatalessObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render: function(ctx) {\n this._transformDone = true;\n this.callSuper('render', ctx);\n this._transformDone = false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n var ownCache = fabric.Object.prototype.shouldCache.call(this);\n if (ownCache) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow: function() {\n if (fabric.Object.prototype.willDrawShadow.call(this)) {\n return true;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return this.ownCaching || (this.group && this.group.isOnACache());\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i].render(ctx);\n }\n this._drawClipPath(ctx, this.clipPath);\n },\n\n /**\n * Check if cache is dirty\n */\n isCacheDirty: function(skipCanvas) {\n if (this.callSuper('isCacheDirty', skipCanvas)) {\n return true;\n }\n if (!this.statefullCache) {\n return false;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].isCacheDirty(true)) {\n if (this._cacheCanvas) {\n // if this group has not a cache canvas there is nothing to clean\n var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-x / 2, -y / 2, x, y);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Restores original state of each of group objects (original state is that which was before group was created).\n * if the nested boolean is true, the original state will be restored just for the\n * first group and not for all the group chain\n * @private\n * @param {Boolean} nested tell the function to restore object state up to the parent group and not more\n * @return {fabric.Group} thisArg\n * @chainable\n */\n _restoreObjectsState: function() {\n var groupMatrix = this.calcOwnMatrix();\n this._objects.forEach(function(object) {\n // instead of using _this = this;\n fabric.util.addTransformToObject(object, groupMatrix);\n delete object.group;\n object.setCoords();\n });\n return this;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n destroy: function() {\n // when group is destroyed objects needs to get a repaint to be eventually\n // displayed on canvas.\n this._objects.forEach(function(object) {\n object.set('dirty', true);\n });\n return this._restoreObjectsState();\n },\n\n dispose: function () {\n this.callSuper('dispose');\n this.forEachObject(function (object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n },\n\n /**\n * make a group an active selection, remove the group from canvas\n * the group has to be on canvas for this to work.\n * @return {fabric.ActiveSelection} thisArg\n * @chainable\n */\n toActiveSelection: function() {\n if (!this.canvas) {\n return;\n }\n var objects = this._objects, canvas = this.canvas;\n this._objects = [];\n var options = this.toObject();\n delete options.objects;\n var activeSelection = new fabric.ActiveSelection([]);\n activeSelection.set(options);\n activeSelection.type = 'activeSelection';\n canvas.remove(this);\n objects.forEach(function(object) {\n object.group = activeSelection;\n object.dirty = true;\n canvas.add(object);\n });\n activeSelection.canvas = canvas;\n activeSelection._objects = objects;\n canvas._activeObject = activeSelection;\n activeSelection.setCoords();\n return activeSelection;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n ungroupOnCanvas: function() {\n return this._restoreObjectsState();\n },\n\n /**\n * Sets coordinates of all objects inside group\n * @return {fabric.Group} thisArg\n * @chainable\n */\n setObjectsCoords: function() {\n var skipControls = true;\n this.forEachObject(function(object) {\n object.setCoords(skipControls);\n });\n return this;\n },\n\n /**\n * @private\n */\n _calcBounds: function(onlyWidthHeight) {\n var aX = [],\n aY = [],\n o, prop, coords,\n props = ['tr', 'br', 'bl', 'tl'],\n i = 0, iLen = this._objects.length,\n j, jLen = props.length;\n\n for ( ; i < iLen; ++i) {\n o = this._objects[i];\n coords = o.calcACoords();\n for (j = 0; j < jLen; j++) {\n prop = props[j];\n aX.push(coords[prop].x);\n aY.push(coords[prop].y);\n }\n o.aCoords = coords;\n }\n\n this._getBounds(aX, aY, onlyWidthHeight);\n },\n\n /**\n * @private\n */\n _getBounds: function(aX, aY, onlyWidthHeight) {\n var minXY = new fabric.Point(min(aX), min(aY)),\n maxXY = new fabric.Point(max(aX), max(aY)),\n top = minXY.y || 0, left = minXY.x || 0,\n width = (maxXY.x - minXY.x) || 0,\n height = (maxXY.y - minXY.y) || 0;\n this.width = width;\n this.height = height;\n if (!onlyWidthHeight) {\n // the bounding box always finds the topleft most corner.\n // whatever is the group origin, we set up here the left/top position.\n this.setPositionByOrigin({ x: left, y: top }, 'left', 'top');\n }\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function(reviver) {\n var svgString = ['\\n'];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n },\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles: function() {\n var opacity = typeof this.opacity !== 'undefined' && this.opacity !== 1 ?\n 'opacity: ' + this.opacity + ';' : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [\n opacity,\n this.getSvgFilter(),\n visibility\n ].join('');\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var svgString = [];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n\n return this._createBaseClipPathSVGMarkup(svgString, { reviver: reviver });\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Group} instance from an object representation\n * @static\n * @memberOf fabric.Group\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an group instance is created\n */\n fabric.Group.fromObject = function(object, callback) {\n var objects = object.objects,\n options = fabric.util.object.clone(object, true);\n delete options.objects;\n if (typeof objects === 'string') {\n // it has to be an url or something went wrong.\n fabric.loadSVGFromURL(objects, function (elements) {\n var group = fabric.util.groupSVGElements(elements, object, objects);\n var clipPath = options.clipPath;\n delete options.clipPath;\n group.set(options);\n if (clipPath) {\n fabric.util.enlivenObjects([clipPath], function(elivenedObjects) {\n group.clipPath = elivenedObjects[0];\n callback && callback(group);\n });\n }\n else {\n callback && callback(group);\n }\n });\n return;\n }\n fabric.util.enlivenObjects(objects, function (enlivenedObjects) {\n fabric.util.enlivenObjectEnlivables(object, options, function () {\n callback && callback(new fabric.Group(enlivenedObjects, options, true));\n });\n });\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.ActiveSelection) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.ActiveSelection\n * @extends fabric.Group\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.ActiveSelection#initialize} for constructor definition\n */\n fabric.ActiveSelection = fabric.util.createClass(fabric.Group, /** @lends fabric.ActiveSelection.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'activeSelection',\n\n /**\n * Constructor\n * @param {Object} objects ActiveSelection objects\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(objects, options) {\n options = options || {};\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (options.originX) {\n this.originX = options.originX;\n }\n if (options.originY) {\n this.originY = options.originY;\n }\n this._calcBounds();\n this._updateObjectsCoords();\n fabric.Object.prototype.initialize.call(this, options);\n this.setCoords();\n },\n\n /**\n * Change te activeSelection to a normal group,\n * High level function that automatically adds it to canvas as\n * active object. no events fired.\n * @since 2.0.0\n * @return {fabric.Group}\n */\n toGroup: function() {\n var objects = this._objects.concat();\n this._objects = [];\n var options = fabric.Object.prototype.toObject.call(this);\n var newGroup = new fabric.Group([]);\n delete options.type;\n newGroup.set(options);\n objects.forEach(function(object) {\n object.canvas.remove(object);\n object.group = newGroup;\n });\n newGroup._objects = objects;\n if (!this.canvas) {\n return newGroup;\n }\n var canvas = this.canvas;\n canvas.add(newGroup);\n canvas._activeObject = newGroup;\n newGroup.setCoords();\n return newGroup;\n },\n\n /**\n * If returns true, deselection is cancelled.\n * @since 2.0.0\n * @return {Boolean} [cancel]\n */\n onDeselect: function() {\n this.destroy();\n return false;\n },\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return false;\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls: function(ctx, styleOverride, childrenOverride) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.callSuper('_renderControls', ctx, styleOverride);\n childrenOverride = childrenOverride || { };\n if (typeof childrenOverride.hasControls === 'undefined') {\n childrenOverride.hasControls = false;\n }\n childrenOverride.forActiveSelection = true;\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i]._renderControls(ctx, childrenOverride);\n }\n ctx.restore();\n },\n });\n\n /**\n * Returns {@link fabric.ActiveSelection} instance from an object representation\n * @static\n * @memberOf fabric.ActiveSelection\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an ActiveSelection instance is created\n */\n fabric.ActiveSelection.fromObject = function(object, callback) {\n fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) {\n delete object.objects;\n callback && callback(new fabric.ActiveSelection(enlivenedObjects, object, true));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var extend = fabric.util.object.extend;\n\n if (!global.fabric) {\n global.fabric = { };\n }\n\n if (global.fabric.Image) {\n fabric.warn('fabric.Image is already defined.');\n return;\n }\n\n /**\n * Image class\n * @class fabric.Image\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n * @see {@link fabric.Image#initialize} for constructor definition\n */\n fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'image',\n\n /**\n * Width of a stroke.\n * For image quality a stroke multiple of 2 gives better results.\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default\n */\n srcFromAttribute: false,\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleX: 1,\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleY: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingX: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingY: 1,\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n minimumScaleTrigger: 0.5,\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('cropX', 'cropY'),\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n cacheKey: '',\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropX: 0,\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropY: 0,\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n imageSmoothing: true,\n\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element\n * @param {Object} [options] Options object\n * @param {function} [callback] callback function to call after eventual filters applied.\n * @return {fabric.Image} thisArg\n */\n initialize: function(element, options) {\n options || (options = { });\n this.filters = [];\n this.cacheKey = 'texture' + fabric.Object.__uid++;\n this.callSuper('initialize', options);\n this._initElement(element, options);\n },\n\n /**\n * Returns image element which this instance if based on\n * @return {HTMLImageElement} Image element\n */\n getElement: function() {\n return this._element || {};\n },\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setElement: function(element, options) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._element = element;\n this._originalElement = element;\n this._initConfig(options);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n return this;\n },\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture: function(key) {\n var backend = fabric.filterBackend;\n if (backend && backend.evictCachesForKey) {\n backend.evictCachesForKey(key);\n }\n },\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose: function () {\n this.callSuper('dispose');\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._cacheContext = undefined;\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n },\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin: function() {\n return this._originalElement && (this._originalElement.crossOrigin || null);\n },\n\n /**\n * Returns original size of an image\n * @return {Object} Object with \"width\" and \"height\" properties\n */\n getOriginalSize: function() {\n var element = this.getElement();\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n var w = this.width / 2, h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var filters = [];\n\n this.filters.forEach(function(filterObj) {\n if (filterObj) {\n filters.push(filterObj.toObject());\n }\n });\n var object = extend(\n this.callSuper(\n 'toObject',\n ['cropX', 'cropY'].concat(propertiesToInclude)\n ), {\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters: filters,\n });\n if (this.resizeFilter) {\n object.resizeFilter = this.resizeFilter.toObject();\n }\n return object;\n },\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop: function() {\n return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString = [], imageMarkup = [], strokeSvg, element = this._element,\n x = -this.width / 2, y = -this.height / 2, clipPath = '', imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n var clipPathId = fabric.Object.__uid++;\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n'\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = '\" image-rendering=\"optimizeSpeed';\n }\n imageMarkup.push('\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n '\" width=\"', element.width || element.naturalWidth,\n '\" height=\"', element.height || element.height,\n imageRendering,\n '\"', clipPath,\n '>\\n');\n\n if (this.stroke || this.strokeDashArray) {\n var origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n '\\t\\n'\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== 'fill') {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n }\n else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc: function(filtered) {\n var element = filtered ? this._element : this._originalElement;\n if (element) {\n if (element.toDataURL) {\n return element.toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src');\n }\n else {\n return element.src;\n }\n }\n else {\n return this.src || '';\n }\n },\n\n /**\n * Sets source of an image\n * @param {String} src Source string (URL)\n * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)\n * @param {Object} [options] Options object\n * @param {String} [options.crossOrigin] crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setSrc: function(src, callback, options) {\n fabric.util.loadImage(src, function(img, isError) {\n this.setElement(img, options);\n this._setWidthHeight();\n callback && callback(this, isError);\n }, this, options && options.crossOrigin);\n return this;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n applyResizeFilters: function() {\n var filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.scaleX,\n scaleY = objectScale.scaleY,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n var canvasEl = fabric.util.createCanvasElement(),\n cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,\n sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n fabric.filterBackend.applyFilters(\n [filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n },\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n * @return {thisArg} return the fabric.Image object\n * @chainable\n */\n applyFilters: function(filters) {\n\n filters = filters || this.filters || [];\n filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(this.cacheKey + '_filtered');\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n this._filteredEl = null;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return this;\n }\n\n var imgElement = this._originalElement,\n sourceWidth = imgElement.naturalWidth || imgElement.width,\n sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the element is the same we need to create a new element\n var canvasEl = fabric.util.createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n }\n else {\n // clear the existing element to get new filter data\n // also dereference the eventual resized _element\n this._element = this._filteredEl;\n this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n fabric.filterBackend.applyFilters(\n filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);\n if (this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY = this._element.height / this._originalElement.height;\n }\n return this;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n fabric.Object.prototype.drawCacheOnCanvas.call(this, ctx);\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache: function() {\n return this.needsItsOwnCache();\n },\n\n _renderFill: function(ctx) {\n var elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n var scaleX = this._filterScalingX, scaleY = this._filterScalingY,\n w = this.width, h = this.height, min = Math.min, max = Math.max,\n // crop values cannot be lesser than 0.\n cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),\n elWidth = elementToDraw.naturalWidth || elementToDraw.width,\n elHeight = elementToDraw.naturalHeight || elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = min(w * scaleX, elWidth - sX),\n sH = min(h * scaleY, elHeight - sY),\n x = -w / 2, y = -h / 2,\n maxDestW = min(w, elWidth / scaleX - cropX),\n maxDestH = min(h, elHeight / scaleY - cropY);\n\n elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n },\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize: function() {\n var scale = this.getTotalObjectScaling();\n return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);\n },\n\n /**\n * @private\n */\n _resetWidthHeight: function() {\n this.set(this.getOriginalSize());\n },\n\n /**\n * The Image class's initialization method. This method is automatically\n * called by the constructor.\n * @private\n * @param {HTMLImageElement|String} element The element representing the image\n * @param {Object} [options] Options object\n */\n _initElement: function(element, options) {\n this.setElement(fabric.util.getById(element), options);\n fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initConfig: function(options) {\n options || (options = { });\n this.setOptions(options);\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Array} filters to be initialized\n * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created\n */\n _initFilters: function(filters, callback) {\n if (filters && filters.length) {\n fabric.util.enlivenObjects(filters, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, 'fabric.Image.filters');\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n * @param {Object} [options] Object with width/height properties\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n var el = this.getElement();\n this.width = options.width || el.naturalWidth || el.width || 0;\n this.height = options.height || el.naturalHeight || el.height || 0;\n },\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n * @return {Object}\n */\n parsePreserveAspectRatioAttribute: function() {\n var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),\n rWidth = this._element.width, rHeight = this._element.height,\n scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,\n offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };\n if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n }\n else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX: scaleX,\n scaleY: scaleY,\n offsetLeft: offsetLeft,\n offsetTop: offsetTop,\n cropX: cropX,\n cropY: cropY\n };\n }\n });\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n fabric.Image.CSS_CANVAS = 'canvas-img';\n\n /**\n * Alias for getSrc\n * @static\n */\n fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;\n\n /**\n * Creates an instance of fabric.Image from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} callback Callback to invoke when an image instance is created\n */\n fabric.Image.fromObject = function(_object, callback) {\n var object = fabric.util.object.clone(_object);\n fabric.util.loadImage(object.src, function(img, isError) {\n if (isError) {\n callback && callback(null, true);\n return;\n }\n fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {\n object.filters = filters || [];\n fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {\n object.resizeFilter = resizeFilters[0];\n fabric.util.enlivenObjectEnlivables(object, object, function () {\n var image = new fabric.Image(img, object);\n callback(image, false);\n });\n });\n });\n }, null, object.crossOrigin);\n };\n\n /**\n * Creates an instance of fabric.Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.\n * @param {Object} [imgOptions] Options object\n */\n fabric.Image.fromURL = function(url, callback, imgOptions) {\n fabric.util.loadImage(url, function(img, isError) {\n callback && callback(new fabric.Image(img, imgOptions), isError);\n }, null, imgOptions && imgOptions.crossOrigin);\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n fabric.Image.ATTRIBUTE_NAMES =\n fabric.SHARED_ATTRIBUTES.concat(\n 'x y width height preserveAspectRatio xlink:href crossOrigin image-rendering'.split(' ')\n );\n\n /**\n * Returns {@link fabric.Image} instance from an SVG element\n * @static\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} callback Callback to execute when fabric.Image object is created\n * @return {fabric.Image} Instance of fabric.Image\n */\n fabric.Image.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);\n fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,\n extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * @private\n * @return {Number} angle value\n */\n _getAngleValueForStraighten: function() {\n var angle = this.angle % 360;\n if (angle > 0) {\n return Math.round((angle - 1) / 90) * 90;\n }\n return Math.round(angle / 90) * 90;\n },\n\n /**\n * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n straighten: function() {\n return this.rotate(this._getAngleValueForStraighten());\n },\n\n /**\n * Same as {@link fabric.Object.prototype.straighten} but with animation\n * @param {Object} callbacks Object with callback functions\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Object} thisArg\n */\n fxStraighten: function(callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n return fabric.util.animate({\n target: this,\n startValue: this.get('angle'),\n endValue: this._getAngleValueForStraighten(),\n duration: this.FX_DURATION,\n onChange: function(value) {\n _this.rotate(value);\n onChange();\n },\n onComplete: function() {\n _this.setCoords();\n onComplete();\n },\n });\n }\n});\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Straightens object, then rerenders canvas\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n straightenObject: function (object) {\n object.straighten();\n this.requestRenderAll();\n return this;\n },\n\n /**\n * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n */\n fxStraightenObject: function (object) {\n return object.fxStraighten({\n onChange: this.requestRenderAllBound\n });\n }\n});\n\n\n(function() {\n\n 'use strict';\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n function testPrecision(gl, precision){\n var fragmentSource = 'precision ' + precision + ' float;\\nvoid main(){}';\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n return false;\n }\n return true;\n }\n\n /**\n * Indicate whether this filtering backend is supported by the user's browser.\n * @param {Number} tileSize check if the tileSize is supported\n * @returns {Boolean} Whether the user's browser supports WebGL.\n */\n fabric.isWebglSupported = function(tileSize) {\n if (fabric.isLikelyNode) {\n return false;\n }\n tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;\n var canvas = document.createElement('canvas');\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n var isSupported = false;\n // eslint-disable-next-line\n if (gl) {\n fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n isSupported = fabric.maxTextureSize >= tileSize;\n var precisions = ['highp', 'mediump', 'lowp'];\n for (var i = 0; i < 3; i++){\n if (testPrecision(gl, precisions[i])){\n fabric.webGlPrecision = precisions[i];\n break;\n };\n }\n }\n this.isSupported = isSupported;\n return isSupported;\n };\n\n fabric.WebglFilterBackend = WebglFilterBackend;\n\n /**\n * WebGL filter backend.\n */\n function WebglFilterBackend(options) {\n if (options && options.tileSize) {\n this.tileSize = options.tileSize;\n }\n this.setupGLContext(this.tileSize, this.tileSize);\n this.captureGPUInfo();\n };\n\n WebglFilterBackend.prototype = /** @lends fabric.WebglFilterBackend.prototype */ {\n\n tileSize: 2048,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext: function(width, height) {\n this.dispose();\n this.createWebGLCanvas(width, height);\n // eslint-disable-next-line\n this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n this.chooseFastestCopyGLTo2DMethod(width, height);\n },\n\n /**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * putImageData is faster than drawImage for that specific operation.\n */\n chooseFastestCopyGLTo2DMethod: function(width, height) {\n var canMeasurePerf = typeof window.performance !== 'undefined', canUseImageData;\n try {\n new ImageData(1, 1);\n canUseImageData = true;\n }\n catch (e) {\n canUseImageData = false;\n }\n // eslint-disable-next-line no-undef\n var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined';\n // eslint-disable-next-line no-undef\n var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';\n\n if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {\n return;\n }\n\n var targetCanvas = fabric.util.createCanvasElement();\n // eslint-disable-next-line no-undef\n var imageBuffer = new ArrayBuffer(width * height * 4);\n if (fabric.forceGLPutImageData) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n return;\n }\n var testContext = {\n imageBuffer: imageBuffer,\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas\n };\n var startTime, drawImageTime, putImageDataTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = window.performance.now();\n copyGLTo2DDrawImage.call(testContext, this.gl, testContext);\n drawImageTime = window.performance.now() - startTime;\n\n startTime = window.performance.now();\n copyGLTo2DPutImageData.call(testContext, this.gl, testContext);\n putImageDataTime = window.performance.now() - startTime;\n\n if (drawImageTime > putImageDataTime) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n }\n else {\n this.copyGLTo2D = copyGLTo2DDrawImage;\n }\n },\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas: function(width, height) {\n var canvas = fabric.util.createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n var glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false\n },\n gl = canvas.getContext('webgl', glOptions);\n if (!gl) {\n gl = canvas.getContext('experimental-webgl', glOptions);\n }\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n },\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters: function(filters, source, width, height, targetCanvas, cacheKey) {\n var gl = this.gl;\n var cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n var pipelineState = {\n originalWidth: source.width || source.originalWidth,\n originalHeight: source.height || source.originalHeight,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture: cachedTexture ||\n this.createTexture(gl, width, height, !cachedTexture && source),\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas\n };\n var tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach(function(filter) { filter && filter.applyTo(pipelineState); });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n },\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose: function() {\n if (this.canvas) {\n this.canvas = null;\n this.gl = null;\n }\n this.clearWebGLCaches();\n },\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches: function() {\n this.programCache = {};\n this.textureCache = {};\n },\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {Number} width The width to initialize the texture at.\n * @param {Number} height The height to initialize the texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n * @param {Number} filterType gl.NEAREST or gl.LINEAR usually, webgl numeri constants\n * @returns {WebGLTexture}\n */\n createTexture: function(gl, width, height, textureImageSource, filterType) {\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterType || gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterType || gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);\n }\n else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n return texture;\n },\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture: function(uniqueId, textureImageSource) {\n if (this.textureCache[uniqueId]) {\n return this.textureCache[uniqueId];\n }\n else {\n var texture = this.createTexture(\n this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);\n this.textureCache[uniqueId] = texture;\n return texture;\n }\n },\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey: function(cacheKey) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n },\n\n copyGLTo2D: copyGLTo2DDrawImage,\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo: function() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n var gl = this.gl, gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n var ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n },\n };\n})();\n\nfunction resizeCanvasIfNeeded(pipelineState) {\n var targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width, height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DDrawImage(gl, pipelineState) {\n var glCanvas = gl.canvas, targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n var sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0,\n targetCanvas.width, targetCanvas.height);\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DPutImageData(gl, pipelineState) {\n var targetCanvas = pipelineState.targetCanvas, ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n\n // eslint-disable-next-line no-undef\n var u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n // eslint-disable-next-line no-undef\n var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n var imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n}\n\n\n(function() {\n\n 'use strict';\n\n var noop = function() {};\n\n fabric.Canvas2dFilterBackend = Canvas2dFilterBackend;\n\n /**\n * Canvas 2D filter backend.\n */\n function Canvas2dFilterBackend() {};\n\n Canvas2dFilterBackend.prototype = /** @lends fabric.Canvas2dFilterBackend.prototype */ {\n evictCachesForKey: noop,\n dispose: noop,\n clearWebGLCaches: noop,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters: function(filters, sourceElement, sourceWidth, sourceHeight, targetCanvas) {\n var ctx = targetCanvas.getContext('2d');\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n var imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var pipelineState = {\n sourceWidth: sourceWidth,\n sourceHeight: sourceHeight,\n imageData: imageData,\n originalEl: sourceElement,\n originalImageData: originalImageData,\n canvasEl: targetCanvas,\n ctx: ctx,\n filterBackend: this,\n };\n filters.forEach(function(filter) { filter.applyTo(pipelineState); });\n if (pipelineState.imageData.width !== sourceWidth || pipelineState.imageData.height !== sourceHeight) {\n targetCanvas.width = pipelineState.imageData.width;\n targetCanvas.height = pipelineState.imageData.height;\n }\n ctx.putImageData(pipelineState.imageData, 0, 0);\n return pipelineState;\n },\n\n };\n})();\n\n\n/**\n * @namespace fabric.Image.filters\n * @memberOf fabric.Image\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n */\nfabric.Image = fabric.Image || { };\nfabric.Image.filters = fabric.Image.filters || { };\n\n/**\n * Root filter class from which all filter classes inherit from\n * @class fabric.Image.filters.BaseFilter\n * @memberOf fabric.Image.filters\n */\nfabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'BaseFilter',\n\n /**\n * Array of attributes to send with buffers. do not modify\n * @private\n */\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n fragmentSource: 'precision highp float;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n '}',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Sets filter's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram: function(gl, fragmentSource, vertexSource) {\n fragmentSource = fragmentSource || this.fragmentSource;\n vertexSource = vertexSource || this.vertexSource;\n if (fabric.webGlPrecision !== 'highp'){\n fragmentSource = fragmentSource.replace(\n /precision highp float/g,\n 'precision ' + fabric.webGlPrecision + ' float'\n );\n }\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Vertex shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(vertexShader)\n );\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Fragment shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(fragmentShader)\n );\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Shader link error for \"${this.type}\" ' +\n gl.getProgramInfoLog(program)\n );\n }\n\n var attributeLocations = this.getAttributeLocations(gl, program);\n var uniformLocations = this.getUniformLocations(gl, program) || { };\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n return {\n program: program,\n attributeLocations: attributeLocations,\n uniformLocations: uniformLocations\n };\n },\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations: function(gl, program) {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n },\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations: function (/* gl, program */) {\n // in case i do not need any special uniform i need to return an empty object\n return { };\n },\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData: function(gl, attributeLocations, aPositionData) {\n var attributeLocation = attributeLocations.aPosition;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n },\n\n _setupFrameBuffer: function(options) {\n var gl = options.context, width, height;\n if (options.passes > 1) {\n width = options.destinationWidth;\n height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(gl, width, height);\n }\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,\n options.targetTexture, 0);\n }\n else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n },\n\n _swapTextures: function(options) {\n options.passes--;\n options.pass++;\n var temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n },\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n isNeutralState: function(/* options */) {\n var main = this.mainParameter,\n _class = fabric.Image.filters[this.type].prototype;\n if (main) {\n if (Array.isArray(_class[main])) {\n for (var i = _class[main].length; i--;) {\n if (this[main][i] !== _class[main][i]) {\n return false;\n }\n }\n return true;\n }\n else {\n return _class[main] === this[main];\n }\n }\n else {\n return false;\n }\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n if (!options.programCache.hasOwnProperty(this.type)) {\n options.programCache[this.type] = this.createProgram(options.context);\n }\n return options.programCache[this.type];\n },\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL: function(options) {\n var gl = options.context;\n var shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n }\n else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n\n bindAdditionalTexture: function(gl, texture, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n },\n\n unbindAdditionalTexture: function(gl, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n },\n\n getMainParameter: function() {\n return this[this.mainParameter];\n },\n\n setMainParameter: function(value) {\n this[this.mainParameter] = value;\n },\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData: function(/* gl, uniformLocations */) {\n // Intentionally left blank. Override me in subclasses.\n },\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer: function(options) {\n if (!options.helpLayer) {\n var helpLayer = document.createElement('canvas');\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n var object = { type: this.type }, mainP = this.mainParameter;\n if (mainP) {\n object[mainP] = this[mainP];\n }\n return object;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON: function() {\n // delegate, not alias\n return this.toObject();\n }\n});\n\nfabric.Image.filters.BaseFilter.fromObject = function(object, callback) {\n var filter = new fabric.Image.filters[object.type](object);\n callback && callback(filter);\n return filter;\n};\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Matrix filter class\n * @class fabric.Image.filters.ColorMatrix\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.ColorMatrix#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://www.webwasp.co.uk/tutorials/219/Color_Matrix_Filter.php}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl}\n * @example Kodachrome filter\n * var filter = new fabric.Image.filters.ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.ColorMatrix = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'ColorMatrix',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform mat4 uColorMatrix;\\n' +\n 'uniform vec4 uConstants;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color *= uColorMatrix;\\n' +\n 'color += uConstants;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ],\n\n mainParameter: 'matrix',\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n * to save some calculation\n * @type Boolean\n * @default true\n */\n colorsOnly: true,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.matrix = this.matrix.slice(0);\n },\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = data.length,\n m = this.matrix,\n r, g, b, a, i, colorsOnly = this.colorsOnly;\n\n for (i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n }\n else {\n a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n uConstants: gl.getUniformLocation(program, 'uConstants'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var m = this.matrix,\n matrix = [\n m[0], m[1], m[2], m[3],\n m[5], m[6], m[7], m[8],\n m[10], m[11], m[12], m[13],\n m[15], m[16], m[17], m[18]\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] function to invoke after filter creation\n * @return {fabric.Image.filters.ColorMatrix} Instance of fabric.Image.filters.ColorMatrix\n */\n fabric.Image.filters.ColorMatrix.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Brightness filter class\n * @class fabric.Image.filters.Brightness\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Brightness#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Brightness = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Brightness',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBrightness;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += uBrightness;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n brightness: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'brightness',\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.brightness === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n brightness = Math.round(this.brightness * 255);\n for (i = 0; i < len; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBrightness: gl.getUniformLocation(program, 'uBrightness'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness\n */\n fabric.Image.filters.Brightness.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Adapted from html5rocks article\n * @class fabric.Image.filters.Convolute\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Convolute#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example Sharpen filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * var filter = new fabric.Image.filters.Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Convolute = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Convolute',\n\n /*\n * Opaque value (true/false)\n */\n opaque: false,\n\n /*\n * matrix for the filter, max 9x9\n */\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: {\n Convolute_3_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_3_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_5_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_5_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_7_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_7_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_9_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_9_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n },\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Convolute.prototype\n * @param {Object} [options] Options object\n * @param {Boolean} [options.opaque=false] Opaque value (true/false)\n * @param {Array} [options.matrix] Filter matrix\n */\n\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var size = Math.sqrt(this.matrix.length);\n var cacheKey = this.type + '_' + size + '_' + (this.opaque ? 1 : 0);\n var shaderSource = this.fragmentSource[cacheKey];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0,\n r, g, b, a, dstOff,\n scx, scy, srcOff, wt,\n x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0; g = 0; b = 0; a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n uSize: gl.getUniformLocation(program, 'uSize'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n opaque: this.opaque,\n matrix: this.matrix\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute\n */\n fabric.Image.filters.Convolute.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Grayscale image filter class\n * @class fabric.Image.filters.Grayscale\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Grayscale = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Grayscale',\n\n fragmentSource: {\n average: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (color.r + color.b + color.g) / 3.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, color.a);\\n' +\n '}',\n lightness: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n luminosity: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n },\n\n\n /**\n * Grayscale mode, between 'average', 'lightness', 'luminosity'\n * @param {String} type\n * @default\n */\n mode: 'average',\n\n mainParameter: 'mode',\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length, value,\n mode = this.mode;\n for (i = 0; i < len; i += 4) {\n if (mode === 'average') {\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n }\n else if (mode === 'lightness') {\n value = (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) / 2;\n }\n else if (mode === 'luminosity') {\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n }\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var shaderSource = this.fragmentSource[this.mode];\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMode: gl.getUniformLocation(program, 'uMode'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n // default average mode.\n var mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n },\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState: function() {\n return false;\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale\n */\n fabric.Image.filters.Grayscale.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Invert filter class\n * @class fabric.Image.filters.Invert\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Invert = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Invert',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uInvert;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'if (uInvert == 1) {\\n' +\n 'gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\\n' +\n '} else {\\n' +\n 'gl_FragColor = color;\\n' +\n '}\\n' +\n '}',\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n invert: true,\n\n mainParameter: 'invert',\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length;\n for (i = 0; i < len; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n }\n },\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function() {\n return !this.invert;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uInvert: gl.getUniformLocation(program, 'uInvert'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1i(uniformLocations.uInvert, this.invert);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert\n */\n fabric.Image.filters.Invert.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Noise filter class\n * @class fabric.Image.filters.Noise\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Noise#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Noise = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Noise',\n\n /**\n * Fragment source for the noise program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uStepH;\\n' +\n 'uniform float uNoise;\\n' +\n 'uniform float uSeed;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'float rand(vec2 co, float seed, float vScale) {\\n' +\n 'return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'noise',\n\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n noise: 0,\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.noise === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n noise = this.noise, rand;\n\n for (i = 0, len = data.length; i < len; i += 4) {\n\n rand = (0.5 - Math.random()) * noise;\n\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uNoise: gl.getUniformLocation(program, 'uNoise'),\n uSeed: gl.getUniformLocation(program, 'uSeed'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n noise: this.noise\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise\n */\n fabric.Image.filters.Noise.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Pixelate filter class\n * @class fabric.Image.filters.Pixelate\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Pixelate#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Pixelate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Pixelate',\n\n blocksize: 4,\n\n mainParameter: 'blocksize',\n\n /**\n * Fragment source for the Pixelate program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBlocksize;\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'float blockW = uBlocksize * uStepW;\\n' +\n 'float blockH = uBlocksize * uStepW;\\n' +\n 'int posX = int(vTexCoord.x / blockW);\\n' +\n 'int posY = int(vTexCoord.y / blockH);\\n' +\n 'float fposX = float(posX);\\n' +\n 'float fposY = float(posY);\\n' +\n 'vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\\n' +\n 'vec4 color = texture2D(uTexture, squareCoords);\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = imageData.height,\n jLen = imageData.width,\n index, i, j, r, g, b, a,\n _i, _j, _iLen, _jLen;\n\n for (i = 0; i < iLen; i += this.blocksize) {\n for (j = 0; j < jLen; j += this.blocksize) {\n\n index = (i * 4) * jLen + (j * 4);\n\n r = data[index];\n g = data[index + 1];\n b = data[index + 2];\n a = data[index + 3];\n\n _iLen = Math.min(i + this.blocksize, iLen);\n _jLen = Math.min(j + this.blocksize, jLen);\n for (_i = i; _i < _iLen; _i++) {\n for (_j = j; _j < _jLen; _j++) {\n index = (_i * 4) * jLen + (_j * 4);\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n },\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState: function() {\n return this.blocksize === 1;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n uStepW: gl.getUniformLocation(program, 'uStepW'),\n uStepH: gl.getUniformLocation(program, 'uStepH'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate\n */\n fabric.Image.filters.Pixelate.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Remove white filter class\n * @class fabric.Image.filters.RemoveColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.RemoveColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveColor.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'RemoveColor',\n\n /**\n * Color to remove, in any format understood by fabric.Color.\n * @param {String} type\n * @default\n */\n color: '#FFFFFF',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uLow;\\n' +\n 'uniform vec4 uHigh;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n 'if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\\n' +\n 'gl_FragColor.a = 0.0;\\n' +\n '}\\n' +\n '}',\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n distance: 0.02,\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n useAlpha: false,\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.RemoveWhite.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.color=#RRGGBB] Threshold value\n * @param {Number} [options.distance=10] Distance value\n */\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n distance = this.distance * 255,\n r, g, b,\n source = new fabric.Color(this.color).getSource(),\n lowC = [\n source[0] - distance,\n source[1] - distance,\n source[2] - distance,\n ],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n\n for (i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n if (r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]) {\n data[i + 3] = 0;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uLow: gl.getUniformLocation(program, 'uLow'),\n uHigh: gl.getUniformLocation(program, 'uHigh'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource(),\n distance = parseFloat(this.distance),\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n color: this.color,\n distance: this.distance\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.RemoveColor} Instance of fabric.Image.filters.RemoveWhite\n */\n fabric.Image.filters.RemoveColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n var matrices = {\n Brownie: [\n 0.59970,0.34553,-0.27082,0,0.186,\n -0.03770,0.86095,0.15059,0,-0.1449,\n 0.24113,-0.07441,0.44972,0,-0.02965,\n 0,0,0,1,0\n ],\n Vintage: [\n 0.62793,0.32021,-0.03965,0,0.03784,\n 0.02578,0.64411,0.03259,0,0.02926,\n 0.04660,-0.08512,0.52416,0,0.02023,\n 0,0,0,1,0\n ],\n Kodachrome: [\n 1.12855,-0.39673,-0.03992,0,0.24991,\n -0.16404,1.08352,-0.05498,0,0.09698,\n -0.16786,-0.56034,1.60148,0,0.13972,\n 0,0,0,1,0\n ],\n Technicolor: [\n 1.91252,-0.85453,-0.09155,0,0.04624,\n -0.30878,1.76589,-0.10601,0,-0.27589,\n -0.23110,-0.75018,1.84759,0,0.12137,\n 0,0,0,1,0\n ],\n Polaroid: [\n 1.438,-0.062,-0.062,0,0,\n -0.122,1.378,-0.122,0,0,\n -0.016,-0.016,1.483,0,0,\n 0,0,0,1,0\n ],\n Sepia: [\n 0.393, 0.769, 0.189, 0, 0,\n 0.349, 0.686, 0.168, 0, 0,\n 0.272, 0.534, 0.131, 0, 0,\n 0, 0, 0, 1, 0\n ],\n BlackWhite: [\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 0, 0, 0, 1, 0,\n ]\n };\n\n for (var key in matrices) {\n filters[key] = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.Sepia.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: key,\n\n /**\n * Colormatrix for the effect\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: matrices[key],\n\n /**\n * Lock the matrix export for this kind of static, parameter less filters.\n */\n mainParameter: false,\n /**\n * Lock the colormatrix on the color part, skipping alpha\n */\n colorsOnly: true,\n\n });\n fabric.Image.filters[key].fromObject = fabric.Image.filters.BaseFilter.fromObject;\n }\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Blend filter class\n * @class fabric.Image.filter.BlendColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */ {\n type: 'BlendColor',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n * @type String\n * @default\n **/\n color: '#F95C63',\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n * @type String\n * @default\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend color operation.\n * @type Number\n * @default\n **/\n alpha: 1,\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen: 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n diff: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion: 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: 'if (uColor.r < 0.5) {\\n' +\n 'gl_FragColor.r *= 2.0 * uColor.r;\\n' +\n '} else {\\n' +\n 'gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\\n' +\n '}\\n' +\n 'if (uColor.g < 0.5) {\\n' +\n 'gl_FragColor.g *= 2.0 * uColor.g;\\n' +\n '} else {\\n' +\n 'gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\\n' +\n '}\\n' +\n 'if (uColor.b < 0.5) {\\n' +\n 'gl_FragColor.b *= 2.0 * uColor.b;\\n' +\n '} else {\\n' +\n 'gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\\n' +\n '}\\n',\n tint: 'gl_FragColor.rgb *= (1.0 - uColor.a);\\n' +\n 'gl_FragColor.rgb += uColor.rgb;\\n',\n },\n\n /**\n * build the fragment source for the filters, joining the common part with\n * the specific one.\n * @param {String} mode the mode of the filter, a key of this.fragmentSource\n * @return {String} the source to be compiled\n * @private\n */\n buildSource: function(mode) {\n return 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'gl_FragColor = color;\\n' +\n 'if (color.a > 0.0) {\\n' +\n this.fragmentSource[mode] +\n '}\\n' +\n '}';\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode, shaderSource;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n shaderSource = this.buildSource(this.mode);\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, iLen = data.length,\n tr, tg, tb,\n r, g, b,\n source, alpha1 = 1 - this.alpha;\n\n source = new fabric.Color(this.color).getSource();\n tr = source[0] * this.alpha;\n tg = source[1] * this.alpha;\n tb = source[2] * this.alpha;\n\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n break;\n case 'screen':\n data[i] = 255 - (255 - r) * (255 - tr) / 255;\n data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;\n data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'diff':\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] = tr < 128 ? (2 * r * tr / 255) : (255 - 2 * (255 - r) * (255 - tr) / 255);\n data[i + 1] = tg < 128 ? (2 * g * tg / 255) : (255 - 2 * (255 - g) * (255 - tg) / 255);\n data[i + 2] = tb < 128 ? (2 * b * tb / 255) : (255 - 2 * (255 - b) * (255 - tb) / 255);\n break;\n case 'exclusion':\n data[i] = tr + r - ((2 * tr * r) / 255);\n data[i + 1] = tg + g - ((2 * tg * g) / 255);\n data[i + 2] = tb + b - ((2 * tb * b) / 255);\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColor: gl.getUniformLocation(program, 'uColor'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource();\n source[0] = this.alpha * source[0] / 255;\n source[1] = this.alpha * source[1] / 255;\n source[2] = this.alpha * source[2] / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n color: this.color,\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.BlendColor} Instance of fabric.Image.filters.BlendColor\n */\n fabric.Image.filters.BlendColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Image Blend filter class\n * @class fabric.Image.filter.BlendImage\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendImage = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.BlendImage.prototype */ {\n type: 'BlendImage',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n image: null,\n\n /**\n * Blend mode for the filter (one of \"multiply\", \"mask\")\n * @type String\n * @default\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n alpha: 1,\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'uniform mat3 uTransformMatrix;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.rgba *= color2.rgba;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n mask: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.a = color2.a;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n var shaderSource = this.fragmentSource[this.mode];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n applyToWebGL: function(options) {\n // load texture to blend.\n var gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);\n this.callSuper('applyToWebGL', options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n },\n\n createTexture: function(backend, image) {\n return backend.getCachedTexture(image.cacheKey, image._element);\n },\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix: function() {\n var image = this.image,\n width = image._element.width,\n height = image._element.height;\n return [\n 1 / image.scaleX, 0, 0,\n 0, 1 / image.scaleY, 0,\n -image.left / width, -image.top / height, 1\n ];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n resources = options.filterBackend.resources,\n data = imageData.data, iLen = data.length,\n width = imageData.width,\n height = imageData.height,\n tr, tg, tb, ta,\n r, g, b, a,\n canvas1, context, image = this.image, blendData;\n\n if (!resources.blendImage) {\n resources.blendImage = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blendImage;\n context = canvas1.getContext('2d');\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n }\n else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(image.scaleX, 0, 0, image.scaleY, image.left, image.top);\n context.drawImage(image._element, 0, 0, width, height);\n blendData = context.getImageData(0, 0, width, height).data;\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n\n tr = blendData[i];\n tg = blendData[i + 1];\n tb = blendData[i + 2];\n ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n data[i + 3] = a * ta / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n uImage: gl.getUniformLocation(program, 'uImage'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n image: this.image && this.image.toObject(),\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} callback to be invoked after filter creation\n * @return {fabric.Image.filters.BlendImage} Instance of fabric.Image.filters.BlendImage\n */\n fabric.Image.filters.BlendImage.fromObject = function(object, callback) {\n fabric.Image.fromObject(object.image, function(image) {\n var options = fabric.util.object.clone(object);\n options.image = image;\n callback(new fabric.Image.filters.BlendImage(options));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }), pow = Math.pow, floor = Math.floor,\n sqrt = Math.sqrt, abs = Math.abs, round = Math.round, sin = Math.sin,\n ceil = Math.ceil,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Resize image filter class\n * @class fabric.Image.filters.Resize\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Resize = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Resize',\n\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @param {String} resizeType\n * @default\n */\n resizeType: 'hermite',\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n scaleX: 1,\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n scaleY: 1,\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n lanczosLobes: 3,\n\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uDelta: gl.getUniformLocation(program, 'uDelta'),\n uTaps: gl.getUniformLocation(program, 'uTaps'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform2fv(uniformLocations.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]);\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var filterWindow = this.getFilterWindow(), cacheKey = this.type + '_' + filterWindow;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var fragmentShader = this.generateShader(filterWindow);\n options.programCache[cacheKey] = this.createProgram(options.context, fragmentShader);\n }\n return options.programCache[cacheKey];\n },\n\n getFilterWindow: function() {\n var scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n },\n\n getTaps: function() {\n var lobeFunction = this.lanczosCreate(this.lanczosLobes), scale = this.tempScale,\n filterWindow = this.getFilterWindow(), taps = new Array(filterWindow);\n for (var i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n },\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader: function(filterWindow) {\n var offsets = new Array(filterWindow),\n fragmentShader = this.fragmentSourceTOP, filterWindow;\n\n for (var i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = i + '.0 * uDelta';\n }\n\n fragmentShader += 'uniform float uTaps[' + filterWindow + '];\\n';\n fragmentShader += 'void main() {\\n';\n fragmentShader += ' vec4 color = texture2D(uTexture, vTexCoord);\\n';\n fragmentShader += ' float sum = 1.0;\\n';\n\n offsets.forEach(function(offset, i) {\n fragmentShader += ' color += texture2D(uTexture, vTexCoord + ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' color += texture2D(uTexture, vTexCoord - ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' sum += 2.0 * uTaps[' + i + '];\\n';\n });\n fragmentShader += ' gl_FragColor = color / sum;\\n';\n fragmentShader += '}';\n return fragmentShader;\n },\n\n fragmentSourceTOP: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n',\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceHeight = options.destinationHeight;\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n isNeutralState: function() {\n return this.scaleX === 1 && this.scaleY === 1;\n },\n\n lanczosCreate: function(lobes) {\n return function(x) {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.19209290E-07 && x > -1.19209290E-07) {\n return 1.0;\n }\n x *= Math.PI;\n var xx = x / lobes;\n return (sin(x) / x) * sin(xx) / xx;\n };\n },\n\n /**\n * Applies filter to canvas element\n * @memberOf fabric.Image.filters.Resize.prototype\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} scaleX\n * @param {Number} scaleY\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n var oW = imageData.width, oH = imageData.height,\n dW = round(oW * scaleX), dH = round(oH * scaleY),\n newData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n }\n options.imageData = newData;\n },\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo: function(options, oW, oH, dW, dH) {\n var imageData = options.imageData,\n mult = 0.5, doneW = false, doneH = false, stepW = oW * mult,\n stepH = oH * mult, resources = fabric.filterBackend.resources,\n tmpCanvas, ctx, sX = 0, sY = 0, dX = oW, dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = document.createElement('canvas');\n }\n tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n ctx = tmpCanvas.getContext('2d');\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = floor(dW);\n dH = floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < floor(stepW * mult)) {\n stepW = floor(stepW * mult);\n }\n else {\n stepW = dW;\n doneW = true;\n }\n if (dH < floor(stepH * mult)) {\n stepH = floor(stepH * mult);\n }\n else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n },\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize: function(options, oW, oH, dW, dH) {\n\n function process(u) {\n var v, i, weight, idx, a, red, green,\n blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = floor(center.y);\n a = 0; red = 0; green = 0; blue = 0; alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = floor(1000 * abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = { };\n }\n for (var j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = floor(1000 * abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(sqrt(pow(fX * rcpRatioX, 2) + pow(fY * rcpRatioY, 2)) / 1000);\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n }\n else {\n return destImg;\n }\n }\n\n var srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX, ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX, rcpRatioY = 2 / this.rcpScaleY,\n range2X = ceil(ratioX * this.lanczosLobes / 2),\n range2Y = ceil(ratioY * this.lanczosLobes / 2),\n cacheLanc = { }, center = { }, icenter = { };\n\n return process(0);\n },\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering: function(options, oW, oH, dW, dH) {\n var a, b, c, d, x, y, i, j, xDiff, yDiff, chnl,\n color, offset = 0, origPix, ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n w4 = 4 * (oW - 1), img = options.imageData,\n pixels = img.data, destImage = options.ctx.createImageData(dW, dH),\n destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = floor(ratioX * j);\n y = floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color = a * (1 - xDiff) * (1 - yDiff) + b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) + d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n },\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize: function(options, oW, oH, dW, dH) {\n var ratioW = this.rcpScaleX, ratioH = this.rcpScaleY,\n ratioWHalf = ceil(ratioW / 2),\n ratioHHalf = ceil(ratioH / 2),\n img = options.imageData, data = img.data,\n img2 = options.ctx.createImageData(dW, dH), data2 = img2.data;\n for (var j = 0; j < dH; j++) {\n for (var i = 0; i < dW; i++) {\n var x2 = (i + j * dW) * 4, weight = 0, weights = 0, weightsAlpha = 0,\n gxR = 0, gxG = 0, gxB = 0, gxA = 0, centerY = (j + 0.5) * ratioH;\n for (var yy = floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n var dy = abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW, w0 = dy * dy;\n for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,\n w = sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = weight * data[dx + 3] / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n resizeType: this.resizeType,\n lanczosLobes: this.lanczosLobes\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Resize} Instance of fabric.Image.filters.Resize\n */\n fabric.Image.filters.Resize.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Contrast filter class\n * @class fabric.Image.filters.Contrast\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Contrast = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Contrast.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Contrast',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uContrast;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\\n' +\n 'color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n contrast: 0,\n\n mainParameter: 'contrast',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Contrast.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.contrast=0] Value to contrast the image up (-1...1)\n */\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n if (this.contrast === 0) {\n return;\n }\n var imageData = options.imageData, i, len,\n data = imageData.data, len = data.length,\n contrast = Math.floor(this.contrast * 255),\n contrastF = 259 * (contrast + 255) / (255 * (259 - contrast));\n\n for (i = 0; i < len; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uContrast: gl.getUniformLocation(program, 'uContrast'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast\n */\n fabric.Image.filters.Contrast.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Saturate filter class\n * @class fabric.Image.filters.Saturation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Saturation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Saturation = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Saturation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Saturation',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uSaturation;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float rgMax = max(color.r, color.g);\\n' +\n 'float rgbMax = max(rgMax, color.b);\\n' +\n 'color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\\n' +\n 'color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\\n' +\n 'color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n * \n * @param {Number} saturation\n * @default\n */\n saturation: 0,\n\n mainParameter: 'saturation',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Saturate.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.saturate=0] Value to saturate the image (-1...1)\n */\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.saturation === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, len = data.length,\n adjust = -this.saturation, i, max;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uSaturation: gl.getUniformLocation(program, 'uSaturation'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Saturation} Instance of fabric.Image.filters.Saturate\n */\n fabric.Image.filters.Saturation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Vibrance filter class\n * @class fabric.Image.filters.Vibrance\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Vibrance#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Vibrance = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Vibrance.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Vibrance',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uVibrance;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float max = max(color.r, max(color.g, color.b));\\n' +\n 'float avg = (color.r + color.g + color.b) / 3.0;\\n' +\n 'float amt = (abs(max - avg) * 2.0) * uVibrance;\\n' +\n 'color.r += max != color.r ? (max - color.r) * amt : 0.00;\\n' +\n 'color.g += max != color.g ? (max - color.g) * amt : 0.00;\\n' +\n 'color.b += max != color.b ? (max - color.b) * amt : 0.00;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n * \n * @param {Number} vibrance\n * @default\n */\n vibrance: 0,\n\n mainParameter: 'vibrance',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Vibrance.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.vibrance=0] Vibrance value for the image (between -1 and 1)\n */\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.vibrance === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, len = data.length,\n adjust = -this.vibrance, i, max, avg, amt;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n amt = ((Math.abs(max - avg) * 2 / 255) * adjust);\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uVibrance: gl.getUniformLocation(program, 'uVibrance'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Vibrance} Instance of fabric.Image.filters.Vibrance\n */\n fabric.Image.filters.Vibrance.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Blur filter class\n * @class fabric.Image.filters.Blur\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Blur#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Blur = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blur.prototype */ {\n\n type: 'Blur',\n\n /*\n'gl_FragColor = vec4(0.0);',\n'gl_FragColor += texture2D(texture, vTexCoord + -7 * uDelta)*0.0044299121055113265;',\n'gl_FragColor += texture2D(texture, vTexCoord + -6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + -5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + -4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + -3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + -2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + -1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord )*0.159576912161;',\n'gl_FragColor += texture2D(texture, vTexCoord + 1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord + 2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + 3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + 4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + 5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + 6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + 7 * uDelta)*0.0044299121055113265;',\n*/\n\n /* eslint-disable max-len */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'const float nSamples = 15.0;\\n' +\n 'vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\\n' +\n 'float random(vec3 scale) {\\n' +\n /* use the fragment position for a different seed per-pixel */\n 'return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0.0);\\n' +\n 'float total = 0.0;\\n' +\n 'float offset = random(v3offset);\\n' +\n 'for (float t = -nSamples; t <= nSamples; t++) {\\n' +\n 'float percent = (t + offset - 0.5) / nSamples;\\n' +\n 'float weight = 1.0 - abs(percent);\\n' +\n 'color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\\n' +\n 'total += weight;\\n' +\n '}\\n' +\n 'gl_FragColor = color / total;\\n' +\n '}',\n /* eslint-enable max-len */\n\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n * @type Number\n * @default\n */\n blur: 0,\n\n mainParameter: 'blur',\n\n applyTo: function(options) {\n if (options.webgl) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n applyTo2d: function(options) {\n // paint canvasEl with current image data.\n //options.ctx.putImageData(options.imageData, 0, 0);\n options.imageData = this.simpleBlur(options);\n },\n\n simpleBlur: function(options) {\n var resources = options.filterBackend.resources, canvas1, canvas2,\n width = options.imageData.width,\n height = options.imageData.height;\n\n if (!resources.blurLayer1) {\n resources.blurLayer1 = fabric.util.createCanvasElement();\n resources.blurLayer2 = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blurLayer1;\n canvas2 = resources.blurLayer2;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n var ctx1 = canvas1.getContext('2d'),\n ctx2 = canvas2.getContext('2d'),\n nSamples = 15,\n random, percent, j, i,\n blur = this.blur * 0.06 * 0.5;\n\n // load first canvas\n ctx1.putImageData(options.imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n options.ctx.drawImage(canvas1, 0, 0);\n var newImageData = options.ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n delta: gl.getUniformLocation(program, 'uDelta'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.delta, delta);\n },\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta: function() {\n var blurScale = 1, delta = [0, 0], blur;\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n }\n else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n }\n else {\n delta[1] = blur;\n }\n return delta;\n },\n });\n\n /**\n * Deserialize a JSON definition of a BlurFilter into a concrete instance.\n */\n filters.Blur.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Gamma filter class\n * @class fabric.Image.filters.Gamma\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Gamma#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Gamma = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Gamma.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Gamma',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec3 uGamma;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec3 correction = (1.0 / uGamma);\\n' +\n 'color.r = pow(color.r, correction.r);\\n' +\n 'color.g = pow(color.g, correction.g);\\n' +\n 'color.b = pow(color.b, correction.b);\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.rgb *= color.a;\\n' +\n '}',\n\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n gamma: [1, 1, 1],\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'gamma',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.gamma = [1, 1, 1];\n filters.BaseFilter.prototype.initialize.call(this, options);\n },\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData, data = imageData.data,\n gamma = this.gamma, len = data.length,\n rInv = 1 / gamma[0], gInv = 1 / gamma[1],\n bInv = 1 / gamma[2], i;\n\n if (!this.rVals) {\n // eslint-disable-next-line\n this.rVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.gVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.bVals = new Uint8Array(256);\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n for (i = 0, len = 256; i < len; i++) {\n this.rVals[i] = Math.pow(i / 255, rInv) * 255;\n this.gVals[i] = Math.pow(i / 255, gInv) * 255;\n this.bVals[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (i = 0, len = data.length; i < len; i += 4) {\n data[i] = this.rVals[data[i]];\n data[i + 1] = this.gVals[data[i + 1]];\n data[i + 2] = this.bVals[data[i + 2]];\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Gamma} Instance of fabric.Image.filters.Gamma\n */\n fabric.Image.filters.Gamma.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\n filters.Composed = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Composed.prototype */ {\n\n type: 'Composed',\n\n /**\n * A non sparse array of filters to apply\n */\n subFilters: [],\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.subFilters = this.subFilters.slice(0);\n },\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo: function(options) {\n options.passes += this.subFilters.length - 1;\n this.subFilters.forEach(function(filter) {\n filter.applyTo(options);\n });\n },\n\n /**\n * Serialize this filter into JSON.\n *\n * @returns {Object} A JSON representation of this filter.\n */\n toObject: function() {\n return fabric.util.object.extend(this.callSuper('toObject'), {\n subFilters: this.subFilters.map(function(filter) { return filter.toObject(); }),\n });\n },\n\n isNeutralState: function() {\n return !this.subFilters.some(function(filter) { return !filter.isNeutralState(); });\n }\n });\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n */\n fabric.Image.filters.Composed.fromObject = function(object, callback) {\n var filters = object.subFilters || [],\n subFilters = filters.map(function(filter) {\n return new fabric.Image.filters[filter.type](filter);\n }),\n instance = new fabric.Image.filters.Composed({ subFilters: subFilters });\n callback && callback(instance);\n return instance;\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * HueRotation filter class\n * @class fabric.Image.filters.HueRotation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.HueRotation = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.HueRotation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'HueRotation',\n\n /**\n * HueRotation value, from -1 to 1.\n * the unit is radians\n * @param {Number} myParameter\n * @default\n */\n rotation: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'rotation',\n\n calculateMatrix: function() {\n var rad = this.rotation * Math.PI, cos = fabric.util.cos(rad), sin = fabric.util.sin(rad),\n aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos;\n this.matrix = [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ];\n this.matrix[0] = cos + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cos + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cos + aThird * OneMinusCos;\n },\n\n /**\n * HueRotation isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function(options) {\n this.calculateMatrix();\n return filters.BaseFilter.prototype.isNeutralState.call(this, options);\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n this.calculateMatrix();\n filters.BaseFilter.prototype.applyTo.call(this, options);\n },\n\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation\n */\n fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n clone = fabric.util.object.clone;\n\n if (fabric.Text) {\n fabric.warn('fabric.Text is already defined');\n return;\n }\n\n var additionalProps =\n ('fontFamily fontWeight fontSize text underline overline linethrough' +\n ' textAlign fontStyle lineHeight textBackgroundColor charSpacing styles' +\n ' direction path pathStartOffset pathSide pathAlign').split(' ');\n\n /**\n * Text class\n * @class fabric.Text\n * @extends fabric.Object\n * @return {fabric.Text} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n * @see {@link fabric.Text#initialize} for constructor definition\n */\n fabric.Text = fabric.util.createClass(fabric.Object, /** @lends fabric.Text.prototype */ {\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Array\n * @private\n */\n _dimensionAffectingProps: [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide',\n 'pathAlign'\n ],\n\n /**\n * @private\n */\n _reNewline: /\\r?\\n/,\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpacesAndTabs: /[ \\t\\r]/g,\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpaceAndTab: /[ \\t\\r]/,\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reWords: /\\S+/g,\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'text',\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n fontSize: 40,\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n fontWeight: 'normal',\n\n /**\n * Font family\n * @type String\n * @default\n */\n fontFamily: 'Times New Roman',\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n underline: false,\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n overline: false,\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n linethrough: false,\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n textAlign: 'left',\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n fontStyle: 'normal',\n\n /**\n * Line height\n * @type Number\n * @default\n */\n lineHeight: 1.16,\n\n /**\n * Superscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n superscript: {\n size: 0.60, // fontSize factor\n baseline: -0.35 // baseline-shift factor (upwards)\n },\n\n /**\n * Subscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n subscript: {\n size: 0.60, // fontSize factor\n baseline: 0.11 // baseline-shift factor (downwards)\n },\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n textBackgroundColor: '',\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat(additionalProps),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat(additionalProps),\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color.\n * Backwards incompatibility note: This property was named \"strokeStyle\" until v1.1.6\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property was named \"textShadow\" (String) until v1.2.11\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * fabric.Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type fabric.Path\n * @example\n * var textPath = new fabric.Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new fabric.Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n path: null,\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n pathStartOffset: 0,\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {String} 'left|right'\n * @default\n */\n pathSide: 'left',\n\n /**\n * How text is aligned to the path. This property determines\n * the perpendicular position of each character relative to the path.\n * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n * This feature is in BETA, and its behavior may change\n * @type String\n * @default\n */\n pathAlign: 'baseline',\n\n /**\n * @private\n */\n _fontSizeFraction: 0.222,\n\n /**\n * @private\n */\n offsets: {\n underline: 0.10,\n linethrough: -0.315,\n overline: -0.88\n },\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n _fontSizeMult: 1.13,\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n charSpacing: 0,\n\n /**\n * Object containing character styles - top-level properties -> line numbers,\n * 2nd-level properties - character numbers\n * @type Object\n * @default\n */\n styles: null,\n\n /**\n * Reference to a context to measure text char or couple of chars\n * the cacheContext of the canvas will be used or a freshly created one if the object is not on canvas\n * once created it will be referenced on fabric._measuringContext to avoid creating a canvas for every\n * text object created.\n * @type {CanvasRenderingContext2D}\n * @default\n */\n _measuringContext: null,\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n deltaY: 0,\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {String} 'ltr|rtl'\n * @default\n */\n direction: 'ltr',\n\n /**\n * Array of properties that define a style unit (of 'styles').\n * @type {Array}\n * @default\n */\n _styleProperties: [\n 'stroke',\n 'strokeWidth',\n 'fill',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontStyle',\n 'underline',\n 'overline',\n 'linethrough',\n 'deltaY',\n 'textBackgroundColor',\n ],\n\n /**\n * contains characters bounding boxes\n */\n __charBounds: [],\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n CACHE_FONT_SIZE: 400,\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n MIN_TEXT_WIDTH: 2,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n initialize: function(text, options) {\n this.styles = options ? (options.styles || { }) : { };\n this.text = text;\n this.__skipDimension = true;\n this.callSuper('initialize', options);\n if (this.path) {\n this.setPathInfo();\n }\n this.__skipDimension = false;\n this.initDimensions();\n this.setCoords();\n this.setupState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n * @return {fabric.Text} thisArg\n */\n setPathInfo: function() {\n var path = this.path;\n if (path) {\n path.segmentsInfo = fabric.util.getPathSegmentsInfo(path.path);\n }\n },\n\n /**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n * this is for internal use, please do not use it\n * @private\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n getMeasuringContext: function() {\n // if we did not return we have to measure something.\n if (!fabric._measuringContext) {\n fabric._measuringContext = this.canvas && this.canvas.contextCache ||\n fabric.util.createCanvasElement().getContext('2d');\n }\n return fabric._measuringContext;\n },\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText: function() {\n var newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n },\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this._splitText();\n this._clearCache();\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n }\n else {\n this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces: function() {\n var diffSpace, currentLineWidth, numberOfSpaces, accumulatedSpace, line, charBound, spaces;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (this.textAlign !== 'justify' && (i === len - 1 || this.isEndOfWrapping(i))) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth < this.width && (spaces = this.textLines[i].match(this._reSpacesAndTabs))) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (var j = 0, jlen = line.length; j <= jlen; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n }\n else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n return lineIndex === this._textLines.length - 1;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always for text and Itext.\n * @return Number\n */\n missingNewlineOffset: function() {\n return 1;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var dims = this.callSuper('_getCacheCanvasDimensions');\n var fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n var path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n }\n else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n },\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles: function(ctx, charStyle, forMeasuring) {\n ctx.textBaseline = 'alphabetical';\n if (this.path) {\n switch (this.pathAlign) {\n case 'center':\n ctx.textBaseline = 'middle';\n break;\n case 'ascender':\n ctx.textBaseline = 'top';\n break;\n case 'descender':\n ctx.textBaseline = 'bottom';\n break;\n }\n }\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n },\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of fabric.Text object\n */\n calcTextWidth: function() {\n var maxWidth = this.getLineWidth(0);\n\n for (var i = 1, len = this._textLines.length; i < len; i++) {\n var currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n },\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine: function(method, ctx, line, left, top, lineIndex) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n },\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground: function(ctx) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n var heightOfLine,\n lineLeftOffset, originalFill = ctx.fillStyle,\n line, lastColor,\n leftOffset = this._getLeftOffset(),\n lineTopOffset = this._getTopOffset(),\n boxStart = 0, boxWidth = 0, charBox, currentColor, path = this.path,\n drawStart;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) {\n lineTopOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n lineLeftOffset = this._getLineLeftOffset(i);\n boxWidth = 0;\n boxStart = 0;\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor && ctx.fillRect(\n -charBox.width / 2,\n -heightOfLine / this.lineHeight * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight\n );\n ctx.restore();\n }\n else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor && ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {Object} decl style declaration for cache\n * @param {String} decl.fontFamily fontFamily\n * @param {String} decl.fontStyle fontStyle\n * @param {String} decl.fontWeight fontWeight\n * @return {Object} reference to cache\n */\n getFontCache: function(decl) {\n var fontFamily = decl.fontFamily.toLowerCase();\n if (!fabric.charWidthsCache[fontFamily]) {\n fabric.charWidthsCache[fontFamily] = { };\n }\n var cache = fabric.charWidthsCache[fontFamily],\n cacheProp = decl.fontStyle.toLowerCase() + '_' + (decl.fontWeight + '').toLowerCase();\n if (!cache[cacheProp]) {\n cache[cacheProp] = { };\n }\n return cache[cacheProp];\n },\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar: function(_char, charStyle, previousChar, prevCharStyle) {\n // first i try to return from cache\n var fontCache = this.getFontCache(charStyle), fontDeclaration = this._getFontDeclaration(charStyle),\n previousFontDeclaration = this._getFontDeclaration(prevCharStyle), couple = previousChar + _char,\n stylesAreEqual = fontDeclaration === previousFontDeclaration, width, coupleWidth, previousWidth,\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE, kernedWidth;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth;\n }\n if (width === undefined || previousWidth === undefined || coupleWidth === undefined) {\n var ctx = this.getMeasuringContext();\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n }\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n kernedWidth = coupleWidth - previousWidth;\n }\n return { width: width * fontMultiplier, kernedWidth: kernedWidth * fontMultiplier };\n },\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar: function(line, _char) {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n },\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n measureLine: function(lineIndex) {\n var lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n },\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.widthOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine: function(lineIndex) {\n var width = 0, i, grapheme, line = this._textLines[lineIndex], prevGrapheme,\n graphemeInfo, numOfSpaces = 0, lineBounds = new Array(line.length),\n positionInPath = 0, startingPoint, totalPathLength, path = this.path,\n reverse = this.pathSide === 'right';\n\n this.__charBounds[lineIndex] = lineBounds;\n for (i = 0; i < line.length; i++) {\n grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[i] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize\n };\n if (path) {\n totalPathLength = path.segmentsInfo[path.segmentsInfo.length - 1].length;\n startingPoint = fabric.util.getPointOnPath(path.path, 0, path.segmentsInfo);\n startingPoint.x += path.pathOffset.x;\n startingPoint.y += path.pathOffset.y;\n switch (this.textAlign) {\n case 'left':\n positionInPath = reverse ? (totalPathLength - width) : 0;\n break;\n case 'center':\n positionInPath = (totalPathLength - width) / 2;\n break;\n case 'right':\n positionInPath = reverse ? 0 : (totalPathLength - width);\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (i = reverse ? line.length - 1 : 0;\n reverse ? i >= 0 : i < line.length;\n reverse ? i-- : i++) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n }\n else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo, startingPoint);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: numOfSpaces };\n },\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {Object} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath: function(positionInPath, graphemeInfo, startingPoint) {\n var centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n var info = fabric.util.getPointOnPath(path.path, centerPosition, path.segmentsInfo);\n graphemeInfo.renderLeft = info.x - startingPoint.x;\n graphemeInfo.renderTop = info.y - startingPoint.y;\n graphemeInfo.angle = info.angle + (this.pathSide === 'right' ? Math.PI : 0);\n },\n\n /**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * @private\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n */\n _getGraphemeBox: function(grapheme, lineIndex, charIndex, prevGrapheme, skipLeft) {\n var style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1) : { },\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle),\n kernedWidth = info.kernedWidth,\n width = info.width, charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n var box = {\n width: width,\n left: 0,\n height: style.fontSize,\n kernedWidth: kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n var previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left = previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n },\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine: function(lineIndex) {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n var line = this._textLines[lineIndex],\n // char 0 is measured before the line cycle because it nneds to char\n // emptylines\n maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (var i = 1, len = line.length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return this.__lineHeights[lineIndex] = maxHeight * this.lineHeight * this._fontSizeMult;\n },\n\n /**\n * Calculate text box height\n */\n calcTextHeight: function() {\n var lineHeight, height = 0;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += (i === len - 1 ? lineHeight / this.lineHeight : lineHeight);\n }\n return height;\n },\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset: function() {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n },\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset: function() {\n return -this.height / 2;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon: function(ctx, method) {\n ctx.save();\n var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset();\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n var heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill: function(ctx) {\n if (!this.fill && !this.styleHas('fill')) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke: function(ctx) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars: function(method, ctx, line, left, top, lineIndex) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n path = this.path,\n shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex) && !path,\n isLtr = this.direction === 'ltr', sign = this.direction === 'ltr' ? 1 : -1,\n drawingLeft, currentDirection = ctx.canvas.getAttribute('dir');\n ctx.save();\n if (currentDirection !== this.direction) {\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? 'left' : 'right';\n }\n top -= lineHeight * this._fontSizeFraction / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top, lineHeight);\n ctx.restore();\n return;\n }\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = fabric.util.hasStyleChanged(actualStyle, nextStyle, false);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(method, ctx, lineIndex, i, charsToRender, -boxWidth / 2, 0, lineHeight);\n ctx.restore();\n }\n else {\n drawingLeft = left;\n this._renderChar(method, ctx, lineIndex, i, charsToRender, drawingLeft, top, lineHeight);\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {fabric.Gradient} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText: function(filler) {\n var pCanvas = fabric.util.createCanvasElement(), pCtx,\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth, height = this.height + this.strokeWidth;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx);\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n handleFiller: function(ctx, property, filler) {\n var offsetX, offsetY;\n if (filler.toLive) {\n if (filler.gradientUnits === 'percentage' || filler.gradientTransform || filler.patternTransform) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX: offsetX, offsetY: offsetY };\n }\n else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx, this);\n return this._applyPatternGradientTransform(ctx, filler);\n }\n }\n else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n },\n\n _setStrokeStyles: function(ctx, decl) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', decl.stroke);\n },\n\n _setFillStyles: function(ctx, decl) {\n return this.handleFiller(ctx, 'fillStyle', decl.fill);\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar: function(method, ctx, lineIndex, charIndex, _char, left, top) {\n var decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke = method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth,\n fillOffsets, strokeOffsets;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n shouldFill && (fillOffsets = this._setFillStyles(ctx, fullDecl));\n shouldStroke && (strokeOffsets = this._setStrokeStyles(ctx, fullDecl));\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n\n if (decl && decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl && decl.deltaY) {\n top += decl.deltaY;\n }\n shouldFill && ctx.fillText(_char, left - fillOffsets.offsetX, top - fillOffsets.offsetY);\n shouldStroke && ctx.strokeText(_char, left - strokeOffsets.offsetX, top - strokeOffsets.offsetY);\n ctx.restore();\n },\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSuperscript: function(start, end) {\n return this._setScript(start, end, this.superscript);\n },\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSubscript: function(start, end) {\n return this._setScript(start, end, this.subscript);\n },\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n _setScript: function(start, end, schema) {\n var loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'fontSize'),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = { fontSize: fontSize * schema.size, deltaY: dy + fontSize * schema.baseline };\n this.setSelectionStyles(style, start, end);\n return this;\n },\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset: function(lineIndex) {\n var lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth, textAlign = this.textAlign, direction = this.direction,\n isEndOfWrapping, leftOffset = 0, isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n if (textAlign === 'justify'\n || (textAlign === 'justify-center' && !isEndOfWrapping)\n || (textAlign === 'justify-right' && !isEndOfWrapping)\n || (textAlign === 'justify-left' && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === 'center') {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === 'right') {\n leftOffset = lineDiff;\n }\n if (textAlign === 'justify-center') {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === 'justify-right') {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n leftOffset -= lineDiff;\n }\n return leftOffset;\n },\n\n /**\n * @private\n */\n _clearCache: function() {\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n },\n\n /**\n * @private\n */\n _shouldClearDimensionCache: function() {\n var shouldClear = this._forceClearCache;\n shouldClear || (shouldClear = this.hasStateChanged('_dimensionAffectingProps'));\n if (shouldClear) {\n this.dirty = true;\n this._forceClearCache = false;\n }\n return shouldClear;\n },\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth: function(lineIndex) {\n if (this.__lineWidths[lineIndex] !== undefined) {\n return this.__lineWidths[lineIndex];\n }\n\n var lineInfo = this.measureLine(lineIndex);\n var width = lineInfo.width;\n this.__lineWidths[lineIndex] = width;\n return width;\n },\n\n _getWidthOfCharSpacing: function() {\n if (this.charSpacing !== 0) {\n return this.fontSize * this.charSpacing / 1000;\n }\n return 0;\n },\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt: function(lineIndex, charIndex, property) {\n var charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n if (charStyle && typeof charStyle[property] !== 'undefined') {\n return charStyle[property];\n }\n return this[property];\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration: function(ctx, type) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n var heightOfLine, size, _size,\n lineLeftOffset, dy, _dy,\n line, lastDecoration,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(), top,\n boxStart, boxWidth, charBox, currentDecoration,\n maxHeight, currentFill, lastFill, path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n maxHeight = heightOfLine / this.lineHeight;\n lineLeftOffset = this._getLineLeftOffset(i);\n boxStart = 0;\n boxWidth = 0;\n lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n lastFill = this.getValueOfPropertyAt(i, 0, 'fill');\n top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n size = this.getHeightOfChar(i, 0);\n dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, 'fill');\n _size = this.getHeightOfChar(i, j);\n _dy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n ctx.fillStyle = lastFill;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * _size + _dy,\n charBox.kernedWidth,\n this.fontSize / 15\n );\n ctx.restore();\n }\n else if (\n (currentDecoration !== lastDecoration || currentFill !== lastFill || _size !== size || _dy !== dy)\n && boxWidth > 0\n ) {\n var drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n ctx.fillStyle = lastFill;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = _size;\n dy = _dy;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n var drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill;\n currentDecoration && currentFill && ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration: function(styleObject, forMeasuring) {\n var style = styleObject || this, family = this.fontFamily,\n fontIsGeneric = fabric.Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n var fontFamily = family === undefined ||\n family.indexOf('\\'') > -1 || family.indexOf(',') > -1 ||\n family.indexOf('\"') > -1 || fontIsGeneric\n ? style.fontFamily : '\"' + style.fontFamily + '\"';\n return [\n // node-canvas needs \"weight style\", while browsers need \"style weight\"\n // verify if this can be fixed in JSDOM\n (fabric.isLikelyNode ? style.fontWeight : style.fontStyle),\n (fabric.isLikelyNode ? style.fontStyle : style.fontWeight),\n forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px',\n fontFamily\n ].join(' ');\n },\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if object is not visible\n if (!this.visible) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n }\n this.callSuper('render', ctx);\n },\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns {Array} Lines in the text\n */\n _splitTextIntoLines: function(text) {\n var lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'],\n newText = [];\n for (var i = 0; i < lines.length; i++) {\n newLines[i] = fabric.util.string.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return { _unwrappedLines: newLines, lines: lines, graphemeText: newText, graphemeLines: newLines };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var allProperties = additionalProps.concat(propertiesToInclude);\n var obj = this.callSuper('toObject', allProperties);\n obj.styles = fabric.util.stylesToArray(this.styles, this.text);\n if (obj.path) {\n obj.path = this.path.toObject();\n }\n return obj;\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n this.callSuper('set', key, value);\n var needsDims = false;\n var isAddingPath = false;\n if (typeof key === 'object') {\n for (var _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || this._dimensionAffectingProps.indexOf(_key) !== -1;\n isAddingPath = isAddingPath || _key === 'path';\n }\n }\n else {\n needsDims = this._dimensionAffectingProps.indexOf(key) !== -1;\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity: function() {\n return 1;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement})\n * @static\n * @memberOf fabric.Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(\n 'x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor'.split(' '));\n\n /**\n * Default SVG font size\n * @static\n * @memberOf fabric.Text\n */\n fabric.Text.DEFAULT_SVG_FONT_SIZE = 16;\n\n /**\n * Returns fabric.Text instance from an SVG element (not yet implemented)\n * @static\n * @memberOf fabric.Text\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Text.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES),\n parsedAnchor = parsedAttributes.textAnchor || 'left';\n options = fabric.util.object.extend((options ? clone(options) : { }), parsedAttributes);\n\n options.top = options.top || 0;\n options.left = options.left || 0;\n if (parsedAttributes.textDecoration) {\n var textDecoration = parsedAttributes.textDecoration;\n if (textDecoration.indexOf('underline') !== -1) {\n options.underline = true;\n }\n if (textDecoration.indexOf('overline') !== -1) {\n options.overline = true;\n }\n if (textDecoration.indexOf('line-through') !== -1) {\n options.linethrough = true;\n }\n delete options.textDecoration;\n }\n if ('dx' in parsedAttributes) {\n options.left += parsedAttributes.dx;\n }\n if ('dy' in parsedAttributes) {\n options.top += parsedAttributes.dy;\n }\n if (!('fontSize' in options)) {\n options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n\n var textContent = '';\n\n // The XML is not properly parsed in IE9 so a workaround to get\n // textContent is through firstChild.data. Another workaround would be\n // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n if (!('textContent' in element)) {\n if ('firstChild' in element && element.firstChild !== null) {\n if ('data' in element.firstChild && element.firstChild.data !== null) {\n textContent = element.firstChild.data;\n }\n }\n }\n else {\n textContent = element.textContent;\n }\n\n textContent = textContent.replace(/^\\s+|\\s+$|\\n+/g, '').replace(/\\s+/g, ' ');\n var originalStrokeWidth = options.strokeWidth;\n options.strokeWidth = 0;\n\n var text = new fabric.Text(textContent, options),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff,\n offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (parsedAnchor === 'center') {\n offX = text.getScaledWidth() / 2;\n }\n if (parsedAnchor === 'right') {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top: text.top - (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) / text.lineHeight,\n strokeWidth: typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1,\n });\n callback(text);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Text instance from an object representation\n * @static\n * @memberOf fabric.Text\n * @param {Object} object plain js Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Text instance is created\n */\n fabric.Text.fromObject = function(object, callback) {\n var objectCopy = clone(object), path = object.path;\n delete objectCopy.path;\n return fabric.Object._fromObject('Text', objectCopy, function(textInstance) {\n textInstance.styles = fabric.util.stylesFromArray(object.styles, object.text);\n if (path) {\n fabric.Object._fromObject('Path', path, function(pathInstance) {\n textInstance.set('path', pathInstance);\n callback(textInstance);\n }, 'path');\n }\n else {\n callback(textInstance);\n }\n }, 'text');\n };\n\n fabric.Text.genericFonts = ['sans-serif', 'serif', 'cursive', 'fantasy', 'monospace'];\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Text);\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n },\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (var p1 in obj) {\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n },\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n var obj = this.styles, stylesCount = 0, letterCount, stylePropertyValue,\n allStyleObjectPropertiesMatch = true, graphemeCount = 0, styleObject;\n // eslint-disable-next-line\n for (var p1 in obj) {\n letterCount = 0;\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n var styleObject = obj[p1][p2],\n stylePropertyHasBeenSet = styleObject.hasOwnProperty(property);\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n }\n else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property]) {\n delete styleObject[property];\n }\n }\n else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n }\n else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (var i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n this[property] = stylePropertyValue;\n this.removeStyle(property);\n }\n },\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return;\n }\n var obj = this.styles, line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n },\n\n /**\n * @private\n */\n _extendStyles: function(index, styles) {\n var loc = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(loc.lineIndex)) {\n this._setLineStyle(loc.lineIndex);\n }\n\n if (!this._getStyleDeclaration(loc.lineIndex, loc.charIndex)) {\n this._setStyleDeclaration(loc.lineIndex, loc.charIndex, {});\n }\n\n fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles);\n },\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation: function(selectionStart, skipWrapping) {\n if (typeof selectionStart === 'undefined') {\n selectionStart = this.selectionStart;\n }\n var lines = skipWrapping ? this._unwrappedTextLines : this._textLines,\n len = lines.length;\n for (var i = 0; i < len; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart\n };\n }\n selectionStart -= lines[i].length + this.missingNewlineOffset(i);\n }\n return {\n lineIndex: i - 1,\n charIndex: lines[i - 1].length < selectionStart ? lines[i - 1].length : selectionStart\n };\n },\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles: function(startIndex, endIndex, complete) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n var styles = [];\n for (var i = startIndex; i < endIndex; i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n },\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition: function(position, complete) {\n var loc = this.get2DCursorLocation(position),\n style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) :\n this._getStyleDeclaration(loc.lineIndex, loc.charIndex);\n return style || {};\n },\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @return {fabric.IText} thisArg\n * @chainable\n */\n setSelectionStyles: function(styles, startIndex, endIndex) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n for (var i = startIndex; i < endIndex; i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n return this;\n },\n\n /**\n * get the reference, not a clone, of the style object for a given character\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Object} style object\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n var lineStyle = this.styles && this.styles[lineIndex];\n if (!lineStyle) {\n return null;\n }\n return lineStyle[charIndex];\n },\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration: function(lineIndex, charIndex) {\n var style = this._getStyleDeclaration(lineIndex, charIndex) || { },\n styleObject = { }, prop;\n for (var i = 0; i < this._styleProperties.length; i++) {\n prop = this._styleProperties[i];\n styleObject[prop] = typeof style[prop] === 'undefined' ? this[prop] : style[prop];\n }\n return styleObject;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n return !!this.styles[lineIndex];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n _setLineStyle: function(lineIndex) {\n this.styles[lineIndex] = {};\n },\n\n /**\n * @param {Number} lineIndex\n * @private\n */\n _deleteLineStyle: function(lineIndex) {\n delete this.styles[lineIndex];\n }\n });\n})();\n\n\n(function() {\n\n function parseDecoration(object) {\n if (object.textDecoration) {\n object.textDecoration.indexOf('underline') > -1 && (object.underline = true);\n object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);\n object.textDecoration.indexOf('overline') > -1 && (object.overline = true);\n delete object.textDecoration;\n }\n }\n\n /**\n * IText class (introduced in v1.4) Events are also fired with \"text:\"\n * prefix when observing canvas.\n * @class fabric.IText\n * @extends fabric.Text\n * @mixes fabric.Observable\n *\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n *\n * @return {fabric.IText} thisArg\n * @see {@link fabric.IText#initialize} for constructor definition\n *\n *

Supported key combinations:

\n *
\n   *   Move cursor:                    left, right, up, down\n   *   Select character:               shift + left, shift + right\n   *   Select text vertically:         shift + up, shift + down\n   *   Move cursor by word:            alt + left, alt + right\n   *   Select words:                   shift + alt + left, shift + alt + right\n   *   Move cursor to line start/end:  cmd + left, cmd + right or home, end\n   *   Select till start/end of line:  cmd + shift + left, cmd + shift + right or shift + home, shift + end\n   *   Jump to start/end of text:      cmd + up, cmd + down\n   *   Select till start/end of text:  cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n   *   Delete character:               backspace\n   *   Delete word:                    alt + backspace\n   *   Delete line:                    cmd + backspace\n   *   Forward delete:                 delete\n   *   Copy text:                      ctrl/cmd + c\n   *   Paste text:                     ctrl/cmd + v\n   *   Cut text:                       ctrl/cmd + x\n   *   Select entire text:             ctrl/cmd + a\n   *   Quit editing                    tab or esc\n   * 
\n *\n *

Supported mouse/touch combination

\n *
\n   *   Position cursor:                click/touch\n   *   Create selection:               click/touch & drag\n   *   Create selection:               click & shift + click\n   *   Select word:                    double click\n   *   Select line:                    triple click\n   * 
\n */\n fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable, /** @lends fabric.IText.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'i-text',\n\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n selectionStart: 0,\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n selectionEnd: 0,\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(17,119,255,0.3)',\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n isEditing: false,\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n editable: true,\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n editingBorderColor: 'rgba(102,153,255,0.25)',\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n cursorWidth: 2,\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n cursorColor: '',\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n cursorDelay: 1000,\n\n /**\n * Duration of cursor fadein (in ms)\n * @type Number\n * @default\n */\n cursorDuration: 600,\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n caching: true,\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n hiddenTextareaContainer: null,\n\n /**\n * @private\n */\n _reSpace: /\\s|\\n/,\n\n /**\n * @private\n */\n _currentCursorOpacity: 0,\n\n /**\n * @private\n */\n _selectionDirection: null,\n\n /**\n * @private\n */\n _abortCursorAnimation: false,\n\n /**\n * @private\n */\n __widthOfSpace: [],\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n inCompositionMode: false,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.IText} thisArg\n */\n initialize: function(text, options) {\n this.callSuper('initialize', text, options);\n this.initBehavior();\n },\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart: function(index) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n },\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd: function(index) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n },\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n _updateAndFire: function(property, index) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n },\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged: function() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n },\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions: function() {\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this.callSuper('initDimensions');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n this.clearContextTop();\n this.callSuper('render', ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = { };\n this.renderCursorOrSelection();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n this.callSuper('_render', ctx);\n },\n\n /**\n * Prepare and clean the contextTop\n */\n clearContextTop: function(skipRestore) {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n this._clearTextArea(ctx);\n skipRestore || ctx.restore();\n },\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection: function() {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var boundaries = this._getCursorBoundaries(),\n ctx = this.canvas.contextTop;\n this.clearContextTop(true);\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(boundaries, ctx);\n }\n else {\n this.renderSelection(boundaries, ctx);\n }\n ctx.restore();\n },\n\n _clearTextArea: function(ctx) {\n // we add 4 pixel, to be sure to do not leave any pixel out\n var width = this.width + 4, height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n },\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * @private\n * @param {Array} chars Array of characters\n * @param {String} typeOfBoundaries\n */\n _getCursorBoundaries: function(position) {\n\n // left/top are left/top of entire text box\n // leftOffset/topOffset are offset from that left/top point of a text box\n\n if (typeof position === 'undefined') {\n position = this.selectionStart;\n }\n\n var left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(position);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top\n };\n },\n\n /**\n * @private\n */\n _getCursorBoundariesOffsets: function(position) {\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache;\n }\n var lineLeftOffset,\n lineIndex,\n charIndex,\n topOffset = 0,\n leftOffset = 0,\n boundaries,\n cursorPosition = this.get2DCursorLocation(position);\n charIndex = cursorPosition.charIndex;\n lineIndex = cursorPosition.lineIndex;\n for (var i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n var bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n boundaries.left *= -1;\n }\n this.cursorOffsetCache = boundaries;\n return this.cursorOffsetCache;\n },\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor: function(boundaries, ctx) {\n var cursorLocation = this.get2DCursorLocation(),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.scaleX * this.canvas.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n topOffset = boundaries.topOffset,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');\n topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight\n - charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n this.renderSelection(boundaries, ctx);\n }\n ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');\n ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;\n ctx.fillRect(\n boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n topOffset + boundaries.top + dy,\n cursorWidth,\n charHeight);\n },\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection: function(boundaries, ctx) {\n\n var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,\n selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,\n isJustify = this.textAlign.indexOf('justify') !== -1,\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (var i = startLine; i <= endLine; i++) {\n var lineOffset = this._getLineLeftOffset(i) || 0,\n lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0, boxStart = 0, boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?\n }\n else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n }\n else {\n var charSpacing = this._getWidthOfCharSpacing();\n boxEnd = this.__charBounds[endLine][endChar - 1].left\n + this.__charBounds[endLine][endChar - 1].width - charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n var drawStart = boundaries.left + lineOffset + boxStart,\n drawWidth = boxEnd - boxStart,\n drawHeight = lineHeight, extraTop = 0;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n }\n else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - drawWidth;\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight);\n boundaries.topOffset += realLineHeight;\n }\n },\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n },\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | fabric.Gradient | fabric.Pattern} Character color (fill)\n */\n getCurrentCharColor: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');\n },\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex: function() {\n var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n });\n\n /**\n * Returns fabric.IText instance from an object representation\n * @static\n * @memberOf fabric.IText\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as argument\n */\n fabric.IText.fromObject = function(object, callback) {\n var styles = fabric.util.stylesFromArray(object.styles, object.text);\n //copy object to prevent mutation\n var objCopy = Object.assign({}, object, { styles: styles });\n parseDecoration(objCopy);\n if (objCopy.styles) {\n for (var i in objCopy.styles) {\n for (var j in objCopy.styles[i]) {\n parseDecoration(objCopy.styles[i][j]);\n }\n }\n }\n fabric.Object._fromObject('IText', objCopy, callback, 'text');\n };\n})();\n\n\n(function() {\n\n var clone = fabric.util.object.clone;\n\n fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior: function() {\n this.initAddedHandler();\n this.initRemovedHandler();\n this.initCursorSelectionHandlers();\n this.initDoubleClickSimulation();\n this.mouseMoveHandler = this.mouseMoveHandler.bind(this);\n },\n\n onDeselect: function() {\n this.isEditing && this.exitEditing();\n this.selected = false;\n },\n\n /**\n * Initializes \"added\" event handler\n */\n initAddedHandler: function() {\n var _this = this;\n this.on('added', function() {\n var canvas = _this.canvas;\n if (canvas) {\n if (!canvas._hasITextHandlers) {\n canvas._hasITextHandlers = true;\n _this._initCanvasHandlers(canvas);\n }\n canvas._iTextInstances = canvas._iTextInstances || [];\n canvas._iTextInstances.push(_this);\n }\n });\n },\n\n initRemovedHandler: function() {\n var _this = this;\n this.on('removed', function() {\n var canvas = _this.canvas;\n if (canvas) {\n canvas._iTextInstances = canvas._iTextInstances || [];\n fabric.util.removeFromArray(canvas._iTextInstances, _this);\n if (canvas._iTextInstances.length === 0) {\n canvas._hasITextHandlers = false;\n _this._removeCanvasHandlers(canvas);\n }\n }\n });\n },\n\n /**\n * register canvas event to manage exiting on other instances\n * @private\n */\n _initCanvasHandlers: function(canvas) {\n canvas._mouseUpITextHandler = function() {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.__isMousedown = false;\n });\n }\n };\n canvas.on('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * remove canvas event to manage exiting on other instances\n * @private\n */\n _removeCanvasHandlers: function(canvas) {\n canvas.off('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * @private\n */\n _tick: function() {\n this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, '_onTickComplete');\n },\n\n /**\n * @private\n */\n _animateCursor: function(obj, targetOpacity, duration, completeMethod) {\n\n var tickState;\n\n tickState = {\n isAborted: false,\n abort: function() {\n this.isAborted = true;\n },\n };\n\n obj.animate('_currentCursorOpacity', targetOpacity, {\n duration: duration,\n onComplete: function() {\n if (!tickState.isAborted) {\n obj[completeMethod]();\n }\n },\n onChange: function() {\n // we do not want to animate a selection, only cursor\n if (obj.canvas && obj.selectionStart === obj.selectionEnd) {\n obj.renderCursorOrSelection();\n }\n },\n abort: function() {\n return tickState.isAborted;\n }\n });\n return tickState;\n },\n\n /**\n * @private\n */\n _onTickComplete: function() {\n\n var _this = this;\n\n if (this._cursorTimeout1) {\n clearTimeout(this._cursorTimeout1);\n }\n this._cursorTimeout1 = setTimeout(function() {\n _this._currentTickCompleteState = _this._animateCursor(_this, 0, this.cursorDuration / 2, '_tick');\n }, 100);\n },\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor: function(restart) {\n var _this = this,\n delay = restart ? 0 : this.cursorDelay;\n\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this._cursorTimeout2 = setTimeout(function() {\n _this._tick();\n }, delay);\n },\n\n /**\n * Aborts cursor animation and clears all timeouts\n */\n abortCursorAnimation: function() {\n var shouldClear = this._currentTickState || this._currentTickCompleteState,\n canvas = this.canvas;\n this._currentTickState && this._currentTickState.abort();\n this._currentTickCompleteState && this._currentTickCompleteState.abort();\n\n clearTimeout(this._cursorTimeout1);\n clearTimeout(this._cursorTimeout2);\n\n this._currentCursorOpacity = 0;\n // to clear just itext area we need to transform the context\n // it may not be worth it\n if (shouldClear && canvas) {\n canvas.clearContext(canvas.contextTop || canvas.contextContainer);\n }\n\n },\n\n /**\n * Selects entire text\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectAll: function() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText: function() {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n },\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary: function(selectionStart, direction) {\n var text = this._text,\n index = this._reSpace.test(text[selectionStart]) ? selectionStart - 1 : selectionStart,\n _char = text[index],\n // wrong\n reNonWord = fabric.reNonWord;\n\n while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n index += direction;\n _char = text[index];\n }\n if (reNonWord.test(_char)) {\n index += direction === 1 ? 0 : 1;\n }\n return index;\n },\n\n /**\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */\n newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n },\n\n /**\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectLine: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Enters editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n enterEditing: function(e) {\n if (this.isEditing || !this.editable) {\n return;\n }\n\n if (this.canvas) {\n this.canvas.calcOffset();\n this.exitEditingOnOthers(this.canvas);\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea(e);\n this.hiddenTextarea.focus();\n this.hiddenTextarea.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n this.fire('editing:entered');\n this._fireSelectionChanged();\n if (!this.canvas) {\n return this;\n }\n this.canvas.fire('text:editing:entered', { target: this });\n this.initMouseMoveHandler();\n this.canvas.requestRenderAll();\n return this;\n },\n\n exitEditingOnOthers: function(canvas) {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.selected = false;\n if (obj.isEditing) {\n obj.exitEditing();\n }\n });\n }\n },\n\n /**\n * Initializes \"mousemove\" event handler\n */\n initMouseMoveHandler: function() {\n this.canvas.on('mouse:move', this.mouseMoveHandler);\n },\n\n /**\n * @private\n */\n mouseMoveHandler: function(options) {\n if (!this.__isMousedown || !this.isEditing) {\n return;\n }\n\n // regain focus\n document.activeElement !== this.hiddenTextarea && this.hiddenTextarea.focus();\n\n var newSelectionStart = this.getSelectionStartFromPointer(options.e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown || currentStart === currentEnd)\n &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n }\n else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (this.selectionStart !== currentStart || this.selectionEnd !== currentEnd) {\n this.restartCursorIfNeeded();\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * @private\n */\n _setEditingProps: function() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n },\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection: function(start, end, text) {\n var smallerTextStart = text.slice(0, start),\n graphemeStart = fabric.util.string.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = text.slice(start, end),\n graphemeEnd = fabric.util.string.graphemeSplit(smallerTextEnd).length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection: function(start, end, _text) {\n var smallerTextStart = _text.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = _text.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * @private\n */\n _updateTextarea: function() {\n this.cursorOffsetCache = { };\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n var newSelection = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateFromTextArea: function() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = { };\n this.text = this.hiddenTextarea.value;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n var newSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateTextareaPosition: function() {\n if (this.selectionStart === this.selectionEnd) {\n var style = this._calcTextareaPosition();\n this.hiddenTextarea.style.left = style.left;\n this.hiddenTextarea.style.top = style.top;\n }\n },\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition: function() {\n if (!this.canvas) {\n return { x: 1, y: 1 };\n }\n var desiredPosition = this.inCompositionMode ? this.compositionStart : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') * this.lineHeight,\n leftOffset = boundaries.leftOffset,\n m = this.calcTransformMatrix(),\n p = {\n x: boundaries.left + leftOffset,\n y: boundaries.top + boundaries.topOffset + charHeight\n },\n retinaScaling = this.canvas.getRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight,\n scaleX = upperCanvas.clientWidth / upperCanvasWidth,\n scaleY = upperCanvas.clientHeight / upperCanvasHeight;\n\n p = fabric.util.transformPoint(p, m);\n p = fabric.util.transformPoint(p, this.canvas.viewportTransform);\n p.x *= scaleX;\n p.y *= scaleY;\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return { left: p.x + 'px', top: p.y + 'px', fontSize: charHeight + 'px', charHeight: charHeight };\n },\n\n /**\n * @private\n */\n _saveEditingProps: function() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor\n };\n },\n\n /**\n * @private\n */\n _restoreEditingProps: function() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor = this._savedProps.defaultCursor;\n this.canvas.moveCursor = this._savedProps.moveCursor;\n }\n },\n\n /**\n * Exits from editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n exitEditing: function() {\n var isTextChanged = (this._textBeforeEdit !== this.text);\n var hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n this.selectionEnd = this.selectionStart;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this._restoreEditingProps();\n this._currentCursorOpacity = 0;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this.fire('editing:exited');\n isTextChanged && this.fire('modified');\n if (this.canvas) {\n this.canvas.off('mouse:move', this.mouseMoveHandler);\n this.canvas.fire('text:editing:exited', { target: this });\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n },\n\n /**\n * @private\n */\n _removeExtraneousStyles: function() {\n for (var prop in this.styles) {\n if (!this._textLines[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo: function(start, end) {\n var cursorStart = this.get2DCursorLocation(start, true),\n cursorEnd = this.get2DCursorLocation(end, true),\n lineStart = cursorStart.lineIndex,\n charStart = cursorStart.charIndex,\n lineEnd = cursorEnd.lineIndex,\n charEnd = cursorEnd.charIndex,\n i, styleObj;\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) {\n styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = { });\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n }\n else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n styleObj = this.styles[lineStart];\n var diff = charEnd - charStart, numericChar, _char;\n for (i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (_char in this.styles[lineStart]) {\n numericChar = parseInt(_char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[_char];\n delete styleObj[_char];\n }\n }\n }\n }\n },\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles: function(lineIndex, offset) {\n // shift all line styles by offset upward or downward\n // do not clone deep. we need new array, not new style objects\n var clonedStyles = clone(this.styles);\n for (var line in this.styles) {\n var numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n },\n\n restartCursorIfNeeded: function() {\n if (!this._currentTickState || this._currentTickState.isAborted\n || !this._currentTickCompleteState || this._currentTickCompleteState.isAborted\n ) {\n this.initDelayedCursor();\n }\n },\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject: function(lineIndex, charIndex, qty, copiedStyle) {\n var currentCharStyle,\n newLineStyles = {},\n somethingAdded = false,\n isEndOfLine = this._unwrappedTextLines[lineIndex].length === charIndex;\n\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n if (this.styles[lineIndex]) {\n currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1];\n }\n // we clone styles of all chars\n // after cursor onto the current line\n for (var index in this.styles[lineIndex]) {\n var numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n somethingAdded = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n var styleCarriedOver = false;\n if (somethingAdded && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver) {\n // skip the last line of since we already prepared it.\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty - 1]) };\n }\n else if (currentCharStyle) {\n this.styles[lineIndex + qty] = { 0: clone(currentCharStyle) };\n }\n else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n },\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject: function(lineIndex, charIndex, quantity, copiedStyle) {\n if (!this.styles) {\n this.styles = {};\n }\n var currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (var index in currentLineStylesCloned) {\n var numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] = currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]);\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n var newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = clone(newStyle);\n }\n },\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock: function(insertedText, start, copiedStyle) {\n var cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0], linesLength = 0;\n // get an array of how many char per lines are being added.\n for (var i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n }\n else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle);\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength && this.insertNewlineStyleObject(\n cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLength);\n for (var i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n else if (copiedStyle) {\n // this test is required in order to close #6841\n // when a pasted buffer begins with a newline then\n // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n // may be undefined for some reason\n if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n // we use i outside the loop to get it like linesLength\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n },\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift: function(start, end, newSelection) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = 'left';\n }\n else if (this._selectionDirection === 'right') {\n this._selectionDirection = 'left';\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n }\n else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === 'right') {\n this.selectionEnd = newSelection;\n }\n else {\n this.selectionStart = newSelection;\n }\n }\n else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = 'right';\n }\n else if (this._selectionDirection === 'left') {\n this._selectionDirection = 'right';\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n },\n\n setSelectionInBoundaries: function() {\n var length = this.text.length;\n if (this.selectionStart > length) {\n this.selectionStart = length;\n }\n else if (this.selectionStart < 0) {\n this.selectionStart = 0;\n }\n if (this.selectionEnd > length) {\n this.selectionEnd = length;\n }\n else if (this.selectionEnd < 0) {\n this.selectionEnd = 0;\n }\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n /**\n * Initializes \"dbclick\" event handler\n */\n initDoubleClickSimulation: function() {\n\n // for double click\n this.__lastClickTime = +new Date();\n\n // for triple click\n this.__lastLastClickTime = +new Date();\n\n this.__lastPointer = { };\n\n this.on('mousedown', this.onMouseDown);\n },\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown: function(options) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n var newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n this._stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastIsEditing = this.isEditing;\n this.__lastSelected = this.selected;\n },\n\n isTripleClick: function(newPointer) {\n return this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y;\n },\n\n /**\n * @private\n */\n _stopEvent: function(e) {\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n },\n\n /**\n * Initializes event handlers related to cursor or selection\n */\n initCursorSelectionHandlers: function() {\n this.initMousedownHandler();\n this.initMouseupHandler();\n this.initClicks();\n },\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Initializes double and triple click event handlers\n */\n initClicks: function() {\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n },\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n this.__isMousedown = true;\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(options.e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n },\n\n /**\n * Initializes \"mousedown\" event handler\n */\n initMousedownHandler: function() {\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n },\n\n /**\n * Initializes \"mouseup\" event handler\n */\n initMouseupHandler: function() {\n this.on('mouseup', this.mouseUpHandler);\n },\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler: function(options) {\n this.__isMousedown = false;\n if (!this.editable || this.group ||\n (options.transform && options.transform.actionPerformed) ||\n (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n if (this.canvas) {\n var currentActive = this.canvas._activeObject;\n if (currentActive && currentActive !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n\n if (this.__lastSelected && !this.__corner) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(options.e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n }\n else {\n this.renderCursorOrSelection();\n }\n }\n else {\n this.selected = true;\n }\n },\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {Event} e Event object\n */\n setCursorByClick: function(e) {\n var newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart, end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n }\n else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {Event} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer: function(e) {\n var mouseOffset = this.getLocalPointer(e),\n prevWidth = 0,\n width = 0,\n height = 0,\n charIndex = 0,\n lineIndex = 0,\n lineLeftOffset,\n line;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i) * this.scaleY;\n lineIndex = i;\n if (i > 0) {\n charIndex += this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n }\n else {\n break;\n }\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n width = lineLeftOffset * this.scaleX;\n line = this._textLines[lineIndex];\n // handling of RTL: in order to get things work correctly,\n // we assume RTL writing is mirrored compared to LTR writing.\n // so in position detection we mirror the X offset, and when is time\n // of rendering it, we mirror it again.\n if (this.direction === 'rtl') {\n mouseOffset.x = this.width * this.scaleX - mouseOffset.x + width;\n }\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n prevWidth = width;\n // i removed something about flipX here, check.\n width += this.__charBounds[lineIndex][j].kernedWidth * this.scaleX;\n if (width <= mouseOffset.x) {\n charIndex++;\n }\n else {\n break;\n }\n }\n return this._getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, charIndex, jlen);\n },\n\n /**\n * @private\n */\n _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) {\n // we need Math.abs because when width is after the last char, the offset is given as 1, while is 0\n var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n distanceBtwNextCharAndCursor = width - mouseOffset.x,\n offset = distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor ||\n distanceBtwNextCharAndCursor < 0 ? 0 : 1,\n newSelectionStart = index + offset;\n // if object is horizontally flipped, mirror cursor location from the end\n if (this.flipX) {\n newSelectionStart = jlen - newSelectionStart;\n }\n\n if (newSelectionStart > this._text.length) {\n newSelectionStart = this._text.length;\n }\n\n return newSelectionStart;\n }\n});\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea: function() {\n this.hiddenTextarea = fabric.document.createElement('textarea');\n this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n this.hiddenTextarea.setAttribute('autocorrect', 'off');\n this.hiddenTextarea.setAttribute('autocomplete', 'off');\n this.hiddenTextarea.setAttribute('spellcheck', 'false');\n this.hiddenTextarea.setAttribute('data-fabric-hiddentextarea', '');\n this.hiddenTextarea.setAttribute('wrap', 'off');\n var style = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top +\n '; left: ' + style.left + '; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px;' +\n ' padding-top: ' + style.fontSize + ';';\n\n if (this.hiddenTextareaContainer) {\n this.hiddenTextareaContainer.appendChild(this.hiddenTextarea);\n }\n else {\n fabric.document.body.appendChild(this.hiddenTextarea);\n }\n\n fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'keyup', this.onKeyUp.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'input', this.onInput.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'copy', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'cut', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'paste', this.paste.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionstart', this.onCompositionStart.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionupdate', this.onCompositionUpdate.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionend', this.onCompositionEnd.bind(this));\n\n if (!this._clickHandlerInitialized && this.canvas) {\n fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this));\n this._clickHandlerInitialized = true;\n }\n },\n\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behaviour for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the fabric.Itext or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = fabric.util.object.clone(this.keysMap);\n * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0]\n */\n keysMap: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorRight',\n 36: 'moveCursorLeft',\n 37: 'moveCursorLeft',\n 38: 'moveCursorUp',\n 39: 'moveCursorRight',\n 40: 'moveCursorDown',\n },\n\n keysMapRtl: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorLeft',\n 36: 'moveCursorRight',\n 37: 'moveCursorRight',\n 38: 'moveCursorUp',\n 39: 'moveCursorLeft',\n 40: 'moveCursorDown',\n },\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n ctrlKeysMapUp: {\n 67: 'copy',\n 88: 'cut'\n },\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n ctrlKeysMapDown: {\n 65: 'selectAll'\n },\n\n onClick: function() {\n // No need to trigger click event here, focus is enough to have the keyboard appear on Android\n this.hiddenTextarea && this.hiddenTextarea.focus();\n },\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {Event} e Event object\n */\n onKeyDown: function(e) {\n if (!this.isEditing) {\n return;\n }\n var keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n this[keyMap[e.keyCode]](e);\n }\n else if ((e.keyCode in this.ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n }\n else {\n this.canvas && this.canvas.requestRenderAll();\n }\n },\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {Event} e Event object\n */\n onKeyUp: function(e) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if ((e.keyCode in this.ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n },\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput: function(e) {\n var fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n // decisions about style changes.\n var nextText = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n removedText, insertedText,\n charDiff = nextCharCount - charCount,\n selectionStart = this.selectionStart, selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd,\n copiedStyle, removeFrom, removeTo;\n if (this.hiddenTextarea.value === '') {\n this.styles = { };\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n return;\n }\n\n var textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value\n );\n var backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n }\n else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n }\n else {\n removedText = this._text.slice(selectionStart, selectionStart - charDiff);\n }\n }\n insertedText = nextText.slice(textareaSelection.selectionEnd - charDiff, textareaSelection.selectionEnd);\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(selectionStart, selectionStart + 1, false);\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(function() {\n // this return an array of references, but that is fine since we are\n // copying the style later.\n return copiedStyle[0];\n });\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n }\n else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n }\n else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n if (fromPaste && insertedText.join('') === fabric.copiedText && !fabric.disableStyleCopyPaste) {\n copiedStyle = fabric.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n },\n /**\n * Composition start\n */\n onCompositionStart: function() {\n this.inCompositionMode = true;\n },\n\n /**\n * Composition end\n */\n onCompositionEnd: function() {\n this.inCompositionMode = false;\n },\n\n // /**\n // * Composition update\n // */\n onCompositionUpdate: function(e) {\n this.compositionStart = e.target.selectionStart;\n this.compositionEnd = e.target.selectionEnd;\n this.updateTextareaPosition();\n },\n\n /**\n * Copies selected text\n * @param {Event} e Event object\n */\n copy: function() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n\n fabric.copiedText = this.getSelectedText();\n if (!fabric.disableStyleCopyPaste) {\n fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true);\n }\n else {\n fabric.copiedTextStyle = null;\n }\n this._copyDone = true;\n },\n\n /**\n * Pastes text\n * @param {Event} e Event object\n */\n paste: function() {\n this.fromPaste = true;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @return {Object} Clipboard data object\n */\n _getClipboardData: function(e) {\n return (e && e.clipboardData) || fabric.window.clipboardData;\n },\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor: function(lineIndex, charIndex) {\n var widthBeforeCursor = this._getLineLeftOffset(lineIndex), bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n },\n\n /**\n * Gets start offset of a selection\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (lineIndex === this._textLines.length - 1 || e.metaKey || e.keyCode === 34) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return textAfterCursor.length + indexOnOtherLine + 1 + this.missingNewlineOffset(lineIndex);\n },\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset: function(e, isRight) {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n }\n else {\n return this.selectionStart;\n }\n },\n\n /**\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return -this._textLines[lineIndex - 1].length\n + indexOnOtherLine - textBeforeCursor.length + (1 - missingNewlineOffset);\n },\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine: function(lineIndex, width) {\n\n var line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex),\n widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0, charWidth, foundMatch;\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n var leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1);\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n },\n\n\n /**\n * Moves cursor down\n * @param {Event} e Event object\n */\n moveCursorDown: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n },\n\n /**\n * Moves cursor up\n * @param {Event} e Event object\n */\n moveCursorUp: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n },\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {Event} e Event object\n */\n _moveCursorUpOrDown: function(direction, e) {\n // getUpCursorOffset\n // getDownCursorOffset\n var action = 'get' + direction + 'CursorOffset',\n offset = this[action](e, this._selectionDirection === 'right');\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n }\n else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n this.setSelectionInBoundaries();\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift: function(offset) {\n var newSelection = this._selectionDirection === 'left'\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, newSelection);\n return offset !== 0;\n },\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift: function(offset) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n },\n\n /**\n * Moves cursor left\n * @param {Event} e Event object\n */\n moveCursorLeft: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n },\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n */\n _move: function(e, prop, direction) {\n var newValue;\n if (e.altKey) {\n newValue = this['findWordBoundary' + direction](this[prop]);\n }\n else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36 ) {\n newValue = this['findLineBoundary' + direction](this[prop]);\n }\n else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n },\n\n /**\n * @private\n */\n _moveLeft: function(e, prop) {\n return this._move(e, prop, 'Left');\n },\n\n /**\n * @private\n */\n _moveRight: function(e, prop) {\n return this._move(e, prop, 'Right');\n },\n\n /**\n * Moves cursor left without keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithoutShift: function(e) {\n var change = true;\n this._selectionDirection = 'left';\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (this.selectionEnd === this.selectionStart && this.selectionStart !== 0) {\n change = this._moveLeft(e, 'selectionStart');\n\n }\n this.selectionEnd = this.selectionStart;\n return change;\n },\n\n /**\n * Moves cursor left while keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithShift: function(e) {\n if (this._selectionDirection === 'right' && this.selectionStart !== this.selectionEnd) {\n return this._moveLeft(e, 'selectionEnd');\n }\n else if (this.selectionStart !== 0){\n this._selectionDirection = 'left';\n return this._moveLeft(e, 'selectionStart');\n }\n },\n\n /**\n * Moves cursor right\n * @param {Event} e Event object\n */\n moveCursorRight: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n },\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {Event} e Event object\n */\n _moveCursorLeftOrRight: function(direction, e) {\n var actionName = 'moveCursor' + direction + 'With';\n this._currentCursorOpacity = 1;\n\n if (e.shiftKey) {\n actionName += 'Shift';\n }\n else {\n actionName += 'outShift';\n }\n if (this[actionName](e)) {\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor right while keeping selection\n * @param {Event} e\n */\n moveCursorRightWithShift: function(e) {\n if (this._selectionDirection === 'left' && this.selectionStart !== this.selectionEnd) {\n return this._moveRight(e, 'selectionStart');\n }\n else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = 'right';\n return this._moveRight(e, 'selectionEnd');\n }\n },\n\n /**\n * Moves cursor right without keeping selection\n * @param {Event} e Event object\n */\n moveCursorRightWithoutShift: function(e) {\n var changed = true;\n this._selectionDirection = 'right';\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n },\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars: function(start, end) {\n if (typeof end === 'undefined') {\n end = start + 1;\n }\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars: function(text, style, start, end) {\n if (typeof end === 'undefined') {\n end = start;\n }\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n var graphemes = fabric.util.string.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end));\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n var toFixed = fabric.util.toFixed,\n multipleSpacesRegex = / +/g;\n\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n\n /**\n * Returns SVG representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function() {\n var offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(\n this._toSVG(),\n { reviver: reviver, noStyle: true, withShadow: true }\n );\n },\n\n /**\n * @private\n */\n _getSVGLeftTopOffsets: function() {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0)\n };\n },\n\n /**\n * @private\n */\n _wrapSVGTextAndBg: function(textAndBg) {\n var noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textAndBg.textBgRects.join(''),\n '\\t\\t',\n textAndBg.textSpans.join(''),\n '\\n'\n ];\n },\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n _getSVGTextAndBg: function(textTopOffset, textLeftOffset) {\n var textSpans = [],\n textBgRects = [],\n height = textTopOffset, lineOffset;\n // bounding-box background\n this._setSVGBg(textBgRects);\n\n // text and text-background\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(textBgRects, i, textLeftOffset + lineOffset, height);\n }\n this._setSVGTextLineText(textSpans, i, textLeftOffset + lineOffset, height);\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans: textSpans,\n textBgRects: textBgRects\n };\n },\n\n /**\n * @private\n */\n _createTextCharSpan: function(_char, styleDecl, left, top) {\n var shouldUseWhitespace = _char !== _char.trim() || _char.match(multipleSpacesRegex),\n styleProps = this.getSvgSpanStyles(styleDecl, shouldUseWhitespace),\n fillStyles = styleProps ? 'style=\"' + styleProps + '\"' : '',\n dy = styleDecl.deltaY, dySpan = '',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n if (dy) {\n dySpan = ' dy=\"' + toFixed(dy, NUM_FRACTION_DIGITS) + '\" ';\n }\n return [\n '',\n fabric.util.string.escapeXml(_char),\n ''\n ].join('');\n },\n\n _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox, style,\n boxWidth = 0,\n line = this._textLines[lineIndex],\n timeToRender;\n\n textTopOffset += lineHeight * (1 - this._fontSizeFraction) / this.lineHeight;\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = fabric.util.hasStyleChanged(actualStyle, nextStyle, true);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i) || { };\n textSpans.push(this._createTextCharSpan(charsToRender, style, textLeftOffset, textTopOffset));\n charsToRender = '';\n actualStyle = nextStyle;\n textLeftOffset += boxWidth;\n boxWidth = 0;\n }\n }\n },\n\n _pushTextBgRect: function(textBgRects, color, left, top, width, height) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n },\n\n _setSVGTextLineBg: function(textBgRects, i, leftOffset, textTopOffset) {\n var line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight,\n boxWidth = 0,\n boxStart = 0,\n charBox, currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor && this._pushTextBgRect(textBgRects, lastColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n currentColor && this._pushTextBgRect(textBgRects, currentColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n },\n\n /**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n *\n * @private\n * @param {*} value\n * @return {String}\n */\n _getFillAttributes: function(value) {\n var fillColor = (value && typeof value === 'string') ? new fabric.Color(value) : '';\n if (!fillColor || !fillColor.getSource() || fillColor.getAlpha() === 1) {\n return 'fill=\"' + value + '\"';\n }\n return 'opacity=\"' + fillColor.getAlpha() + '\" fill=\"' + fillColor.setAlpha(1).toRgb() + '\"';\n },\n\n /**\n * @private\n */\n _getSVGLineTopOffset: function(lineIndex) {\n var lineTopOffset = 0, lastHeight = 0;\n for (var j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset: (this._fontSizeMult - this._fontSizeFraction) * lastHeight / (this.lineHeight * this._fontSizeMult)\n };\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n var svgStyle = fabric.Object.prototype.getSvgStyles.call(this, skipShadow);\n return svgStyle + ' white-space: pre;';\n },\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n /**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n * @class fabric.Textbox\n * @extends fabric.IText\n * @mixes fabric.Observable\n * @return {fabric.Textbox} thisArg\n * @see {@link fabric.Textbox#initialize} for constructor definition\n */\n fabric.Textbox = fabric.util.createClass(fabric.IText, fabric.Observable, {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'textbox',\n\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n minWidth: 20,\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n dynamicMinWidth: 2,\n\n /**\n * Cached array of text wrapping.\n * @type Array\n */\n __cachedLines: null,\n\n /**\n * Override standard Object class values\n */\n lockScalingFlip: true,\n\n /**\n * Override standard Object class values\n * Textbox needs this on false\n */\n noScaleCache: false,\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Object\n * @private\n */\n _dimensionAffectingProps: fabric.Text.prototype._dimensionAffectingProps.concat('width'),\n\n /**\n * Use this regular expression to split strings in breakable lines\n * @private\n */\n _wordJoiners: /[ \\t\\r]/,\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n splitByGrapheme: false,\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap: function(textInfo) {\n var realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0,\n map = {};\n\n for (var i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n }\n else if (!this.splitByGrapheme && this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) && i > 0) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n },\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return fabric.Text.prototype.styleHas.call(this, property, lineIndex);\n },\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n var offset = 0, nextLineIndex = lineIndex + 1, nextOffset, obj, shouldLimit = false,\n map = this._styleMap[lineIndex], mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (!map) {\n return null;\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return this.callSuper('_getStyleDeclaration', lineIndex, charIndex);\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n _setLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n this.styles[map.line] = {};\n },\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText: function(lines, desiredWidth) {\n var wrapped = [], i;\n this.isWrapping = true;\n for (i = 0; i < lines.length; i++) {\n wrapped = wrapped.concat(this._wrapLine(lines[i], i, desiredWidth));\n }\n this.isWrapping = false;\n return wrapped;\n },\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * it gets called when charBounds are not available yet.\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n * @private\n */\n _measureWord: function(word, lineIndex, charOffset) {\n var width = 0, prevGrapheme, skipLeft = true;\n charOffset = charOffset || 0;\n for (var i = 0, len = word.length; i < len; i++) {\n var box = this._getGraphemeBox(word[i], lineIndex, i + charOffset, prevGrapheme, skipLeft);\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n },\n\n /**\n * Wraps a line of text using the width of the Textbox and a context.\n * @param {Array} line The grapheme array that represent the line\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine: function(_line, lineIndex, desiredWidth, reservedSpace) {\n var lineWidth = 0,\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n line = [],\n // spaces in different languages?\n words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),\n word = '',\n offset = 0,\n infix = splitByGrapheme ? '' : ' ',\n wordWidth = 0,\n infixWidth = 0,\n largestWordWidth = 0,\n lineJustStarted = true,\n additionalSpace = this._getWidthOfCharSpacing(),\n reservedSpace = reservedSpace || 0;\n // fix a difference between split and graphemeSplit\n if (words.length === 0) {\n words.push([]);\n }\n desiredWidth -= reservedSpace;\n for (var i = 0; i < words.length; i++) {\n // if using splitByGrapheme words are already in graphemes.\n word = splitByGrapheme ? words[i] : fabric.util.string.graphemeSplit(words[i]);\n wordWidth = this._measureWord(word, lineIndex, offset);\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > desiredWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n }\n else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme ? 0 : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n // keep track of largest word\n if (wordWidth > largestWordWidth) {\n largestWordWidth = wordWidth;\n }\n }\n\n i && graphemeLines.push(line);\n\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * @return Number\n */\n missingNewlineOffset: function(lineIndex) {\n if (this.splitByGrapheme) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n },\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines: function(text) {\n var newText = fabric.Text.prototype._splitTextIntoLines.call(this, text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (var i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n },\n\n getMinWidth: function() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n },\n\n _removeExtraneousStyles: function() {\n var linesToKeep = {};\n for (var prop in this._styleMap) {\n if (this._textLines[prop]) {\n linesToKeep[this._styleMap[prop].line] = 1;\n }\n }\n for (var prop in this.styles) {\n if (!linesToKeep[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude));\n }\n });\n\n /**\n * Returns fabric.Textbox instance from an object representation\n * @static\n * @memberOf fabric.Textbox\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Textbox instance is created\n */\n fabric.Textbox.fromObject = function(object, callback) {\n var styles = fabric.util.stylesFromArray(object.styles, object.text);\n //copy object to prevent mutation\n var objCopy = Object.assign({}, object, { styles: styles });\n return fabric.Object._fromObject('Textbox', objCopy, callback, 'text');\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var controlsUtils = fabric.controlsUtils,\n scaleSkewStyleHandler = controlsUtils.scaleSkewCursorStyleHandler,\n scaleStyleHandler = controlsUtils.scaleCursorStyleHandler,\n scalingEqually = controlsUtils.scalingEqually,\n scalingYOrSkewingX = controlsUtils.scalingYOrSkewingX,\n scalingXOrSkewingY = controlsUtils.scalingXOrSkewingY,\n scaleOrSkewActionName = controlsUtils.scaleOrSkewActionName,\n objectControls = fabric.Object.prototype.controls;\n\n objectControls.ml = new fabric.Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mr = new fabric.Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mb = new fabric.Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mt = new fabric.Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.tl = new fabric.Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.tr = new fabric.Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.bl = new fabric.Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.br = new fabric.Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.mtr = new fabric.Control({\n x: 0,\n y: -0.5,\n actionHandler: controlsUtils.rotationWithSnapping,\n cursorStyleHandler: controlsUtils.rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: 'rotate',\n });\n\n if (fabric.Textbox) {\n // this is breaking the prototype inheritance, no time / ideas to fix it.\n // is important to document that if you want to have all objects to have a\n // specific custom control, you have to add it to Object prototype and to Textbox\n // prototype. The controls are shared as references. So changes to control `tr`\n // can still apply to all objects if needed.\n var textBoxControls = fabric.Textbox.prototype.controls = { };\n\n textBoxControls.mtr = objectControls.mtr;\n textBoxControls.tr = objectControls.tr;\n textBoxControls.br = objectControls.br;\n textBoxControls.tl = objectControls.tl;\n textBoxControls.bl = objectControls.bl;\n textBoxControls.mt = objectControls.mt;\n textBoxControls.mb = objectControls.mb;\n\n textBoxControls.mr = new fabric.Control({\n x: 0.5,\n y: 0,\n actionHandler: controlsUtils.changeWidth,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionName: 'resizing',\n });\n\n textBoxControls.ml = new fabric.Control({\n x: -0.5,\n y: 0,\n actionHandler: controlsUtils.changeWidth,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionName: 'resizing',\n });\n }\n})();\n\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nfunction getUseId() {\n // We need fully clone React function here to avoid webpack warning React 17 do not export `useId`\n var fullClone = _objectSpread({}, React);\n return fullClone.useId;\n}\nvar uuid = 0;\n\n/** @private Note only worked in develop env. Not work in production. */\nexport function resetUuid() {\n if (process.env.NODE_ENV !== 'production') {\n uuid = 0;\n }\n}\nexport default function useId(id) {\n // Inner id for accessibility usage. Only work in client side\n var _React$useState = React.useState('ssr-id'),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n innerId = _React$useState2[0],\n setInnerId = _React$useState2[1];\n var useOriginId = getUseId();\n var reactNativeId = useOriginId === null || useOriginId === void 0 ? void 0 : useOriginId();\n React.useEffect(function () {\n if (!useOriginId) {\n var nextId = uuid;\n uuid += 1;\n setInnerId(\"rc_unique_\".concat(nextId));\n }\n }, []);\n\n // Developer passed id is single source of truth\n if (id) {\n return id;\n }\n\n // Test env always return mock id\n if (process.env.NODE_ENV === 'test') {\n return 'test-id';\n }\n\n // Return react native id or inner id\n return reactNativeId || innerId;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nexport default function Mask(props) {\n var prefixCls = props.prefixCls,\n style = props.style,\n visible = props.visible,\n maskProps = props.maskProps,\n motionName = props.motionName;\n return /*#__PURE__*/React.createElement(CSSMotion, {\n key: \"mask\",\n visible: visible,\n motionName: motionName,\n leavedClassName: \"\".concat(prefixCls, \"-mask-hidden\")\n }, function (_ref, ref) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: ref,\n style: _objectSpread(_objectSpread({}, motionStyle), style),\n className: classNames(\"\".concat(prefixCls, \"-mask\"), motionClassName)\n }, maskProps));\n });\n}","// =============================== Motion ===============================\nexport function getMotionName(prefixCls, transitionName, animationName) {\n var motionName = transitionName;\n if (!motionName && animationName) {\n motionName = \"\".concat(prefixCls, \"-\").concat(animationName);\n }\n return motionName;\n}\n// =============================== Offset ===============================\nfunction getScroll(w, top) {\n var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n var method = \"scroll\".concat(top ? 'Top' : 'Left');\n if (typeof ret !== 'number') {\n var d = w.document;\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n ret = d.body[method];\n }\n }\n return ret;\n}\nexport function offset(el) {\n var rect = el.getBoundingClientRect();\n var pos = {\n left: rect.left,\n top: rect.top\n };\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScroll(w);\n pos.top += getScroll(w, true);\n return pos;\n}","import * as React from 'react';\nexport default /*#__PURE__*/React.memo(function (_ref) {\n var children = _ref.children;\n return children;\n}, function (_, _ref2) {\n var shouldUpdate = _ref2.shouldUpdate;\n return !shouldUpdate;\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport MemoChildren from './MemoChildren';\nvar sentinelStyle = {\n width: 0,\n height: 0,\n overflow: 'hidden',\n outline: 'none'\n};\nvar Panel = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n className = props.className,\n style = props.style,\n title = props.title,\n ariaId = props.ariaId,\n footer = props.footer,\n closable = props.closable,\n closeIcon = props.closeIcon,\n onClose = props.onClose,\n children = props.children,\n bodyStyle = props.bodyStyle,\n bodyProps = props.bodyProps,\n modalRender = props.modalRender,\n onMouseDown = props.onMouseDown,\n onMouseUp = props.onMouseUp,\n holderRef = props.holderRef,\n visible = props.visible,\n forceRender = props.forceRender,\n width = props.width,\n height = props.height;\n // ================================= Refs =================================\n var sentinelStartRef = useRef();\n var sentinelEndRef = useRef();\n React.useImperativeHandle(ref, function () {\n return {\n focus: function focus() {\n var _sentinelStartRef$cur;\n (_sentinelStartRef$cur = sentinelStartRef.current) === null || _sentinelStartRef$cur === void 0 ? void 0 : _sentinelStartRef$cur.focus();\n },\n changeActive: function changeActive(next) {\n var _document = document,\n activeElement = _document.activeElement;\n if (next && activeElement === sentinelEndRef.current) {\n sentinelStartRef.current.focus();\n } else if (!next && activeElement === sentinelStartRef.current) {\n sentinelEndRef.current.focus();\n }\n }\n };\n });\n // ================================ Style =================================\n var contentStyle = {};\n if (width !== undefined) {\n contentStyle.width = width;\n }\n if (height !== undefined) {\n contentStyle.height = height;\n }\n // ================================ Render ================================\n var footerNode;\n if (footer) {\n footerNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-footer\")\n }, footer);\n }\n var headerNode;\n if (title) {\n headerNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-header\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-title\"),\n id: ariaId\n }, title));\n }\n var closer;\n if (closable) {\n closer = /*#__PURE__*/React.createElement(\"button\", {\n type: \"button\",\n onClick: onClose,\n \"aria-label\": \"Close\",\n className: \"\".concat(prefixCls, \"-close\")\n }, closeIcon || /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-close-x\")\n }));\n }\n var content = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, closer, headerNode, /*#__PURE__*/React.createElement(\"div\", _extends({\n className: \"\".concat(prefixCls, \"-body\"),\n style: bodyStyle\n }, bodyProps), children), footerNode);\n return /*#__PURE__*/React.createElement(\"div\", {\n key: \"dialog-element\",\n role: \"dialog\",\n \"aria-labelledby\": title ? ariaId : null,\n \"aria-modal\": \"true\",\n ref: holderRef,\n style: _objectSpread(_objectSpread({}, style), contentStyle),\n className: classNames(prefixCls, className),\n onMouseDown: onMouseDown,\n onMouseUp: onMouseUp\n }, /*#__PURE__*/React.createElement(\"div\", {\n tabIndex: 0,\n ref: sentinelStartRef,\n style: sentinelStyle,\n \"aria-hidden\": \"true\"\n }), /*#__PURE__*/React.createElement(MemoChildren, {\n shouldUpdate: visible || forceRender\n }, modalRender ? modalRender(content) : content), /*#__PURE__*/React.createElement(\"div\", {\n tabIndex: 0,\n ref: sentinelEndRef,\n style: sentinelStyle,\n \"aria-hidden\": \"true\"\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n Panel.displayName = 'Panel';\n}\nexport default Panel;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport { offset } from '../../util';\nimport Panel from './Panel';\nvar Content = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n title = props.title,\n style = props.style,\n className = props.className,\n visible = props.visible,\n forceRender = props.forceRender,\n destroyOnClose = props.destroyOnClose,\n motionName = props.motionName,\n ariaId = props.ariaId,\n onVisibleChanged = props.onVisibleChanged,\n mousePosition = props.mousePosition;\n var dialogRef = useRef();\n // ============================= Style ==============================\n var _React$useState = React.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n transformOrigin = _React$useState2[0],\n setTransformOrigin = _React$useState2[1];\n var contentStyle = {};\n if (transformOrigin) {\n contentStyle.transformOrigin = transformOrigin;\n }\n function onPrepare() {\n var elementOffset = offset(dialogRef.current);\n setTransformOrigin(mousePosition ? \"\".concat(mousePosition.x - elementOffset.left, \"px \").concat(mousePosition.y - elementOffset.top, \"px\") : '');\n }\n // ============================= Render =============================\n return /*#__PURE__*/React.createElement(CSSMotion, {\n visible: visible,\n onVisibleChanged: onVisibleChanged,\n onAppearPrepare: onPrepare,\n onEnterPrepare: onPrepare,\n forceRender: forceRender,\n motionName: motionName,\n removeOnLeave: destroyOnClose,\n ref: dialogRef\n }, function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(Panel, _extends({}, props, {\n ref: ref,\n title: title,\n ariaId: ariaId,\n prefixCls: prefixCls,\n holderRef: motionRef,\n style: _objectSpread(_objectSpread(_objectSpread({}, motionStyle), style), contentStyle),\n className: classNames(className, motionClassName)\n }));\n });\n});\nContent.displayName = 'Content';\nexport default Content;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport useId from \"rc-util/es/hooks/useId\";\nimport contains from \"rc-util/es/Dom/contains\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport Mask from './Mask';\nimport { getMotionName } from '../util';\nimport Content from './Content';\nexport default function Dialog(props) {\n var _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-dialog' : _props$prefixCls,\n zIndex = props.zIndex,\n _props$visible = props.visible,\n visible = _props$visible === void 0 ? false : _props$visible,\n _props$keyboard = props.keyboard,\n keyboard = _props$keyboard === void 0 ? true : _props$keyboard,\n _props$focusTriggerAf = props.focusTriggerAfterClose,\n focusTriggerAfterClose = _props$focusTriggerAf === void 0 ? true : _props$focusTriggerAf,\n wrapStyle = props.wrapStyle,\n wrapClassName = props.wrapClassName,\n wrapProps = props.wrapProps,\n onClose = props.onClose,\n afterClose = props.afterClose,\n transitionName = props.transitionName,\n animation = props.animation,\n _props$closable = props.closable,\n closable = _props$closable === void 0 ? true : _props$closable,\n _props$mask = props.mask,\n mask = _props$mask === void 0 ? true : _props$mask,\n maskTransitionName = props.maskTransitionName,\n maskAnimation = props.maskAnimation,\n _props$maskClosable = props.maskClosable,\n maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable,\n maskStyle = props.maskStyle,\n maskProps = props.maskProps,\n rootClassName = props.rootClassName;\n var lastOutSideActiveElementRef = useRef();\n var wrapperRef = useRef();\n var contentRef = useRef();\n var _React$useState = React.useState(visible),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n animatedVisible = _React$useState2[0],\n setAnimatedVisible = _React$useState2[1];\n // ========================== Init ==========================\n var ariaId = useId();\n function saveLastOutSideActiveElementRef() {\n if (!contains(wrapperRef.current, document.activeElement)) {\n lastOutSideActiveElementRef.current = document.activeElement;\n }\n }\n function focusDialogContent() {\n if (!contains(wrapperRef.current, document.activeElement)) {\n var _contentRef$current;\n (_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 ? void 0 : _contentRef$current.focus();\n }\n }\n // ========================= Events =========================\n function onDialogVisibleChanged(newVisible) {\n // Try to focus\n if (newVisible) {\n focusDialogContent();\n } else {\n // Clean up scroll bar & focus back\n setAnimatedVisible(false);\n if (mask && lastOutSideActiveElementRef.current && focusTriggerAfterClose) {\n try {\n lastOutSideActiveElementRef.current.focus({\n preventScroll: true\n });\n } catch (e) {\n // Do nothing\n }\n lastOutSideActiveElementRef.current = null;\n }\n // Trigger afterClose only when change visible from true to false\n if (animatedVisible) {\n afterClose === null || afterClose === void 0 ? void 0 : afterClose();\n }\n }\n }\n function onInternalClose(e) {\n onClose === null || onClose === void 0 ? void 0 : onClose(e);\n }\n // >>> Content\n var contentClickRef = useRef(false);\n var contentTimeoutRef = useRef();\n // We need record content click incase content popup out of dialog\n var onContentMouseDown = function onContentMouseDown() {\n clearTimeout(contentTimeoutRef.current);\n contentClickRef.current = true;\n };\n var onContentMouseUp = function onContentMouseUp() {\n contentTimeoutRef.current = setTimeout(function () {\n contentClickRef.current = false;\n });\n };\n // >>> Wrapper\n // Close only when element not on dialog\n var onWrapperClick = null;\n if (maskClosable) {\n onWrapperClick = function onWrapperClick(e) {\n if (contentClickRef.current) {\n contentClickRef.current = false;\n } else if (wrapperRef.current === e.target) {\n onInternalClose(e);\n }\n };\n }\n function onWrapperKeyDown(e) {\n if (keyboard && e.keyCode === KeyCode.ESC) {\n e.stopPropagation();\n onInternalClose(e);\n return;\n }\n // keep focus inside dialog\n if (visible) {\n if (e.keyCode === KeyCode.TAB) {\n contentRef.current.changeActive(!e.shiftKey);\n }\n }\n }\n // ========================= Effect =========================\n useEffect(function () {\n if (visible) {\n setAnimatedVisible(true);\n saveLastOutSideActiveElementRef();\n }\n }, [visible]);\n // Remove direct should also check the scroll bar update\n useEffect(function () {\n return function () {\n clearTimeout(contentTimeoutRef.current);\n };\n }, []);\n // ========================= Render =========================\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: classNames(\"\".concat(prefixCls, \"-root\"), rootClassName)\n }, pickAttrs(props, {\n data: true\n })), /*#__PURE__*/React.createElement(Mask, {\n prefixCls: prefixCls,\n visible: mask && visible,\n motionName: getMotionName(prefixCls, maskTransitionName, maskAnimation),\n style: _objectSpread({\n zIndex: zIndex\n }, maskStyle),\n maskProps: maskProps\n }), /*#__PURE__*/React.createElement(\"div\", _extends({\n tabIndex: -1,\n onKeyDown: onWrapperKeyDown,\n className: classNames(\"\".concat(prefixCls, \"-wrap\"), wrapClassName),\n ref: wrapperRef,\n onClick: onWrapperClick,\n style: _objectSpread(_objectSpread({\n zIndex: zIndex\n }, wrapStyle), {}, {\n display: !animatedVisible ? 'none' : null\n })\n }, wrapProps), /*#__PURE__*/React.createElement(Content, _extends({}, props, {\n onMouseDown: onContentMouseDown,\n onMouseUp: onContentMouseUp,\n ref: contentRef,\n closable: closable,\n ariaId: ariaId,\n prefixCls: prefixCls,\n visible: visible && animatedVisible,\n onClose: onInternalClose,\n onVisibleChanged: onDialogVisibleChanged,\n motionName: getMotionName(prefixCls, transitionName, animation)\n }))));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport Portal from '@rc-component/portal';\nimport Dialog from './Dialog';\n// fix issue #10656\n/*\n * getContainer remarks\n * Custom container should not be return, because in the Portal component, it will remove the\n * return container element here, if the custom container is the only child of it's component,\n * like issue #10656, It will has a conflict with removeChild method in react-dom.\n * So here should add a child (div element) to custom container.\n * */\nvar DialogWrap = function DialogWrap(props) {\n var visible = props.visible,\n getContainer = props.getContainer,\n forceRender = props.forceRender,\n _props$destroyOnClose = props.destroyOnClose,\n destroyOnClose = _props$destroyOnClose === void 0 ? false : _props$destroyOnClose,\n _afterClose = props.afterClose;\n var _React$useState = React.useState(visible),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n animatedVisible = _React$useState2[0],\n setAnimatedVisible = _React$useState2[1];\n React.useEffect(function () {\n if (visible) {\n setAnimatedVisible(true);\n }\n }, [visible]);\n // // 渲染在当前 dom 里;\n // if (getContainer === false) {\n // return (\n // 2} // 不对 body 做任何操作。。\n // />\n // );\n // }\n // Destroy on close will remove wrapped div\n if (!forceRender && destroyOnClose && !animatedVisible) {\n return null;\n }\n return /*#__PURE__*/React.createElement(Portal, {\n open: visible || forceRender || animatedVisible,\n autoDestroy: false,\n getContainer: getContainer,\n autoLock: visible || animatedVisible\n }, /*#__PURE__*/React.createElement(Dialog, _extends({}, props, {\n destroyOnClose: destroyOnClose,\n afterClose: function afterClose() {\n _afterClose === null || _afterClose === void 0 ? void 0 : _afterClose();\n setAnimatedVisible(false);\n }\n })));\n};\nDialogWrap.displayName = 'Dialog';\nexport default DialogWrap;","import DialogWrap from './DialogWrap';\nimport Panel from './Dialog/Content/Panel';\nexport { Panel };\nexport default DialogWrap;","import warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nexport var HOOK_MARK = 'RC_FORM_INTERNAL_HOOKS';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar warningFunc = function warningFunc() {\n warning(false, 'Can not find FormContext. Please make sure you wrap Field under Form.');\n};\nvar Context = /*#__PURE__*/React.createContext({\n getFieldValue: warningFunc,\n getFieldsValue: warningFunc,\n getFieldError: warningFunc,\n getFieldWarning: warningFunc,\n getFieldsError: warningFunc,\n isFieldsTouched: warningFunc,\n isFieldTouched: warningFunc,\n isFieldValidating: warningFunc,\n isFieldsValidating: warningFunc,\n resetFields: warningFunc,\n setFields: warningFunc,\n setFieldValue: warningFunc,\n setFieldsValue: warningFunc,\n validateFields: warningFunc,\n submit: warningFunc,\n getInternalHooks: function getInternalHooks() {\n warningFunc();\n return {\n dispatch: warningFunc,\n initEntityValue: warningFunc,\n registerField: warningFunc,\n useSubscribe: warningFunc,\n setInitialValues: warningFunc,\n destroyForm: warningFunc,\n setCallbacks: warningFunc,\n registerWatch: warningFunc,\n getFields: warningFunc,\n setValidateMessages: warningFunc,\n setPreserve: warningFunc,\n getInitialValue: warningFunc\n };\n }\n});\nexport default Context;","export function toArray(value) {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}","/* eslint no-console:0 */\n\nimport {\n ValidateError,\n ValidateOption,\n RuleValuePackage,\n InternalRuleItem,\n SyncErrorType,\n RuleType,\n Value,\n Values,\n} from './interface';\n\nconst formatRegExp = /%[sdj%]/g;\n\ndeclare var ASYNC_VALIDATOR_NO_WARNING;\n\nexport let warning: (type: string, errors: SyncErrorType[]) => void = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (\n typeof console !== 'undefined' &&\n console.warn &&\n typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined'\n ) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(\n errors: ValidateError[],\n): Record {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(\n template: ((...args: any[]) => string) | string,\n ...args: any[]\n): string {\n let i = 0;\n const len = args.length;\n if (typeof template === 'function') {\n return template.apply(null, args);\n }\n if (typeof template === 'string') {\n let str = template.replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return (Number(args[i++]) as unknown) as string;\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n return str;\n }\n return template;\n}\n\nfunction isNativeStringType(type: string) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'date' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value: Value, type?: string) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj: object) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(\n arr: RuleValuePackage[],\n func: ValidateFunc,\n callback: (errors: ValidateError[]) => void,\n) {\n const results: ValidateError[] = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors: ValidateError[]) {\n results.push(...(errors || []));\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(\n arr: RuleValuePackage[],\n func: ValidateFunc,\n callback: (errors: ValidateError[]) => void,\n) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors: ValidateError[]) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr: Record) {\n const ret: RuleValuePackage[] = [];\n Object.keys(objArr).forEach(k => {\n ret.push(...(objArr[k] || []));\n });\n return ret;\n}\n\nexport class AsyncValidationError extends Error {\n errors: ValidateError[];\n fields: Record;\n\n constructor(\n errors: ValidateError[],\n fields: Record,\n ) {\n super('Async Validation Error');\n this.errors = errors;\n this.fields = fields;\n }\n}\n\ntype ValidateFunc = (\n data: RuleValuePackage,\n doIt: (errors: ValidateError[]) => void,\n) => void;\n\nexport function asyncMap(\n objArr: Record,\n option: ValidateOption,\n func: ValidateFunc,\n callback: (errors: ValidateError[]) => void,\n source: Values,\n): Promise {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = (errors: ValidateError[]) => {\n callback(errors);\n return errors.length\n ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n : resolve(source);\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n const firstFields =\n option.firstFields === true\n ? Object.keys(objArr)\n : option.firstFields || [];\n\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results: ValidateError[] = [];\n const pending = new Promise((resolve, reject) => {\n const next = (errors: ValidateError[]) => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject(\n new AsyncValidationError(results, convertFieldsError(results)),\n )\n : resolve(source);\n }\n };\n if (!objArrKeys.length) {\n callback(results);\n resolve(source);\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nfunction isErrorObj(\n obj: ValidateError | string | (() => string),\n): obj is ValidateError {\n return !!(obj && (obj as ValidateError).message !== undefined);\n}\n\nfunction getValue(value: Values, path: string[]) {\n let v = value;\n for (let i = 0; i < path.length; i++) {\n if (v == undefined) {\n return v;\n }\n v = v[path[i]];\n }\n return v;\n}\n\nexport function complementError(rule: InternalRuleItem, source: Values) {\n return (oe: ValidateError | (() => string) | string): ValidateError => {\n let fieldValue;\n if (rule.fullFields) {\n fieldValue = getValue(source, rule.fullFields);\n } else {\n fieldValue = source[(oe as any).field || rule.fullField];\n }\n if (isErrorObj(oe)) {\n oe.field = oe.field || rule.fullField;\n oe.fieldValue = fieldValue;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n fieldValue,\n field: ((oe as unknown) as ValidateError).field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target: T, source: Partial): T {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import { ExecuteRule } from '../interface';\nimport { format, isEmptyValue } from '../util';\n\nconst required: ExecuteRule = (rule, value, source, errors, options, type) => {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n isEmptyValue(value, type || rule.type))\n ) {\n errors.push(format(options.messages.required, rule.fullField));\n }\n};\n\nexport default required;\n","// https://github.com/kevva/url-regex/blob/master/index.js\nlet urlReg: RegExp;\n\nexport default () => {\n if (urlReg) {\n return urlReg;\n }\n\n const word = '[a-fA-F\\\\d:]';\n const b = options =>\n options && options.includeBoundaries\n ? `(?:(?<=\\\\s|^)(?=${word})|(?<=${word})(?=\\\\s|$))`\n : '';\n\n const v4 =\n '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n\n const v6seg = '[a-fA-F\\\\d]{1,4}';\n const v6 = `\n(?:\n(?:${v6seg}:){7}(?:${v6seg}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:${v6seg}:){6}(?:${v4}|:${v6seg}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:${v6seg}:){5}(?::${v4}|(?::${v6seg}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:${v6seg}:){4}(?:(?::${v6seg}){0,1}:${v4}|(?::${v6seg}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:${v6seg}:){3}(?:(?::${v6seg}){0,2}:${v4}|(?::${v6seg}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:${v6seg}:){2}(?:(?::${v6seg}){0,3}:${v4}|(?::${v6seg}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:${v6seg}:){1}(?:(?::${v6seg}){0,4}:${v4}|(?::${v6seg}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::${v6seg}){0,5}:${v4}|(?::${v6seg}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n`\n .replace(/\\s*\\/\\/.*$/gm, '')\n .replace(/\\n/g, '')\n .trim();\n\n // Pre-compile only the exact regexes because adding a global flag make regexes stateful\n const v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);\n const v4exact = new RegExp(`^${v4}$`);\n const v6exact = new RegExp(`^${v6}$`);\n\n const ip = options =>\n options && options.exact\n ? v46Exact\n : new RegExp(\n `(?:${b(options)}${v4}${b(options)})|(?:${b(options)}${v6}${b(\n options,\n )})`,\n 'g',\n );\n\n ip.v4 = (options?) =>\n options && options.exact\n ? v4exact\n : new RegExp(`${b(options)}${v4}${b(options)}`, 'g');\n ip.v6 = (options?) =>\n options && options.exact\n ? v6exact\n : new RegExp(`${b(options)}${v6}${b(options)}`, 'g');\n\n const protocol = `(?:(?:[a-z]+:)?//)`;\n const auth = '(?:\\\\S+(?::\\\\S*)?@)?';\n const ipv4 = ip.v4().source;\n const ipv6 = ip.v6().source;\n const host = '(?:(?:[a-z\\\\u00a1-\\\\uffff0-9][-_]*)*[a-z\\\\u00a1-\\\\uffff0-9]+)';\n const domain =\n '(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*';\n const tld = `(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))`;\n const port = '(?::\\\\d{2,5})?';\n const path = '(?:[/?#][^\\\\s\"]*)?';\n const regex = `(?:${protocol}|www\\\\.)${auth}(?:localhost|${ipv4}|${ipv6}|${host}${domain}${tld})${port}${path}`;\n urlReg = new RegExp(`(?:^${regex}$)`, 'i');\n return urlReg;\n};\n","import { ExecuteRule, Value } from '../interface';\nimport { format } from '../util';\nimport required from './required';\nimport getUrlRegex from './url';\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+\\.)+[a-zA-Z\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]{2,}))$/,\n // url: new RegExp(\n // '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n // 'i',\n // ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value: Value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value: Value) {\n return types.number(value) && !types.integer(value);\n },\n array(value: Value) {\n return Array.isArray(value);\n },\n regexp(value: Value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value: Value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function' &&\n !isNaN(value.getTime())\n );\n },\n number(value: Value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value: Value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value: Value) {\n return typeof value === 'function';\n },\n email(value: Value) {\n return (\n typeof value === 'string' &&\n value.length <= 320 &&\n !!value.match(pattern.email)\n );\n },\n url(value: Value) {\n return (\n typeof value === 'string' &&\n value.length <= 2048 &&\n !!value.match(getUrlRegex())\n );\n },\n hex(value: Value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\nconst type: ExecuteRule = (rule, value, source, errors, options) => {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n};\n\nexport default type;\n","import { ExecuteRule } from '../interface';\nimport { format } from '../util';\n\nconst ENUM = 'enum' as const;\n\nconst enumerable: ExecuteRule = (rule, value, source, errors, options) => {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')),\n );\n }\n};\n\nexport default enumerable;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import { ExecuteRule } from '../interface';\nimport { format } from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nconst whitespace: ExecuteRule = (rule, value, source, errors, options) => {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(format(options.messages.whitespace, rule.fullField));\n }\n};\n\nexport default whitespace;\n","import { ExecuteRule } from '../interface';\nimport { format } from '../util';\n\nconst range: ExecuteRule = (rule, value, source, errors, options) => {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n format(options.messages[key].range, rule.fullField, rule.min, rule.max),\n );\n }\n};\n\nexport default range;\n","import { ExecuteRule } from '../interface';\nimport { format } from '../util';\n\nconst pattern: ExecuteRule = (rule, value, source, errors, options) => {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n};\n\nexport default pattern;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst type: ExecuteValidator = (rule, value, callback, source, options) => {\n const ruleType = rule.type;\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default type;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst string: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n};\n\nexport default string;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst method: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default method;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst number: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule';\nimport { ExecuteValidator } from '../interface';\n\nconst boolean: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default boolean;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst regexp: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default regexp;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst integer: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default integer;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst floatFn: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default floatFn;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule/index';\n\nconst array: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default array;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst object: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default object;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum' as const;\n\nconst enumerable: ExecuteValidator = (\n rule,\n value,\n callback,\n source,\n options,\n) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default enumerable;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst pattern: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n};\n\nexport default pattern;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst date: ExecuteValidator = (rule, value, callback, source, options) => {\n // console.log('integer rule called %j', rule);\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'date')) {\n let dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n};\n\nexport default date;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\n\nconst required: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n};\n\nexport default required;\n","import { ExecuteValidator } from '../interface';\nimport rules from '../rule';\nimport { isEmptyValue } from '../util';\n\nconst any: ExecuteValidator = (rule, value, callback, source, options) => {\n const errors: string[] = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n};\n\nexport default any;\n","import { InternalValidateMessages } from './interface';\n\nexport function newMessages(): InternalValidateMessages {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\nimport {\n InternalRuleItem,\n InternalValidateMessages,\n Rule,\n RuleItem,\n Rules,\n ValidateCallback,\n ValidateMessages,\n ValidateOption,\n Values,\n RuleValuePackage,\n ValidateError,\n ValidateFieldsError,\n SyncErrorType,\n ValidateResult,\n} from './interface';\n\nexport * from './interface';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nclass Schema {\n // ========================= Static =========================\n static register = function register(type: string, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n };\n\n static warning = warning;\n\n static messages = defaultMessages;\n\n static validators = validators;\n\n // ======================== Instance ========================\n rules: Record = null;\n _messages: InternalValidateMessages = defaultMessages;\n\n constructor(descriptor: Rules) {\n this.define(descriptor);\n }\n\n define(rules: Rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n\n Object.keys(rules).forEach(name => {\n const item: Rule = rules[name];\n this.rules[name] = Array.isArray(item) ? item : [item];\n });\n }\n\n messages(messages?: ValidateMessages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n }\n\n validate(\n source: Values,\n option?: ValidateOption,\n callback?: ValidateCallback,\n ): Promise;\n validate(source: Values, callback: ValidateCallback): Promise;\n validate(source: Values): Promise;\n\n validate(source_: Values, o: any = {}, oc: any = () => {}): Promise {\n let source: Values = source_;\n let options: ValidateOption = o;\n let callback: ValidateCallback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback(null, source);\n }\n return Promise.resolve(source);\n }\n\n function complete(results: (ValidateError | ValidateError[])[]) {\n let errors: ValidateError[] = [];\n let fields: ValidateFieldsError = {};\n\n function add(e: ValidateError | ValidateError[]) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (let i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n callback(null, source);\n } else {\n fields = convertFieldsError(errors);\n (callback as (\n errors: ValidateError[],\n fields: ValidateFieldsError,\n ) => void)(errors, fields);\n }\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n\n const series: Record = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n const arr = this.rules[z];\n let value = source[z];\n arr.forEach(r => {\n let rule: InternalRuleItem = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n\n // Fill validator. Skip if nothing need to validate\n rule.validator = this.getValidationMethod(rule);\n if (!rule.validator) {\n return;\n }\n\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullField(key: string, schema: RuleItem) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n fullFields: rule.fullFields ? [...rule.fullFields, key] : [key],\n };\n }\n\n function cb(e: SyncErrorType | SyncErrorType[] = []) {\n let errorList = Array.isArray(e) ? e : [e];\n if (!options.suppressWarning && errorList.length) {\n Schema.warning('async-validator:', errorList);\n }\n if (errorList.length && rule.message !== undefined) {\n errorList = [].concat(rule.message);\n }\n\n // Fill error info\n let filledErrors = errorList.map(complementError(rule, source));\n\n if (options.first && filledErrors.length) {\n errorFields[rule.field] = 1;\n return doIt(filledErrors);\n }\n if (!deep) {\n doIt(filledErrors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n filledErrors = []\n .concat(rule.message)\n .map(complementError(rule, source));\n } else if (options.error) {\n filledErrors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n }\n return doIt(filledErrors);\n }\n\n let fieldsSchema: Record = {};\n if (rule.defaultField) {\n Object.keys(data.value).map(key => {\n fieldsSchema[key] = rule.defaultField;\n });\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n\n const paredFieldsSchema: Record = {};\n\n Object.keys(fieldsSchema).forEach(field => {\n const fieldSchema = fieldsSchema[field];\n const fieldSchemaList = Array.isArray(fieldSchema)\n ? fieldSchema\n : [fieldSchema];\n paredFieldsSchema[field] = fieldSchemaList.map(\n addFullField.bind(null, field),\n );\n });\n const schema = new Schema(paredFieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (filledErrors && filledErrors.length) {\n finalErrors.push(...filledErrors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res: ValidateResult;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n try {\n res = rule.validator(rule, data.value, cb, data.source, options);\n } catch (error) {\n console.error?.(error);\n // rethrow to report error\n if (!options.suppressValidatorError) {\n setTimeout(() => {\n throw error;\n }, 0);\n }\n cb(error.message);\n }\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(\n typeof rule.message === 'function'\n ? rule.message(rule.fullField || rule.field)\n : rule.message || `${rule.fullField || rule.field} fails`,\n );\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && (res as Promise).then) {\n (res as Promise).then(\n () => cb(),\n e => cb(e),\n );\n }\n },\n results => {\n complete(results);\n },\n source,\n );\n }\n\n getType(rule: InternalRuleItem) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n rule.type &&\n !validators.hasOwnProperty(rule.type)\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n }\n\n getValidationMethod(rule: InternalRuleItem) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || undefined;\n }\n}\n\nexport default Schema;\n","var typeTemplate = \"'${name}' is not a valid ${type}\";\nexport var defaultValidateMessages = {\n default: \"Validation error on field '${name}'\",\n required: \"'${name}' is required\",\n enum: \"'${name}' must be one of [${enum}]\",\n whitespace: \"'${name}' cannot be empty\",\n date: {\n format: \"'${name}' is invalid for format date\",\n parse: \"'${name}' could not be parsed as date\",\n invalid: \"'${name}' is invalid date\"\n },\n types: {\n string: typeTemplate,\n method: typeTemplate,\n array: typeTemplate,\n object: typeTemplate,\n number: typeTemplate,\n date: typeTemplate,\n boolean: typeTemplate,\n integer: typeTemplate,\n float: typeTemplate,\n regexp: typeTemplate,\n email: typeTemplate,\n url: typeTemplate,\n hex: typeTemplate\n },\n string: {\n len: \"'${name}' must be exactly ${len} characters\",\n min: \"'${name}' must be at least ${min} characters\",\n max: \"'${name}' cannot be longer than ${max} characters\",\n range: \"'${name}' must be between ${min} and ${max} characters\"\n },\n number: {\n len: \"'${name}' must equal ${len}\",\n min: \"'${name}' cannot be less than ${min}\",\n max: \"'${name}' cannot be greater than ${max}\",\n range: \"'${name}' must be between ${min} and ${max}\"\n },\n array: {\n len: \"'${name}' must be exactly ${len} in length\",\n min: \"'${name}' cannot be less than ${min} in length\",\n max: \"'${name}' cannot be greater than ${max} in length\",\n range: \"'${name}' must be between ${min} and ${max} in length\"\n },\n pattern: {\n mismatch: \"'${name}' does not match pattern ${pattern}\"\n }\n};","export default function get(entity, path) {\n var current = entity;\n for (var i = 0; i < path.length; i += 1) {\n if (current === null || current === undefined) {\n return undefined;\n }\n current = current[path[i]];\n }\n return current;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _toArray from \"@babel/runtime/helpers/esm/toArray\";\nimport get from \"./get\";\nfunction internalSet(entity, paths, value, removeIfUndefined) {\n if (!paths.length) {\n return value;\n }\n var _paths = _toArray(paths),\n path = _paths[0],\n restPath = _paths.slice(1);\n var clone;\n if (!entity && typeof path === 'number') {\n clone = [];\n } else if (Array.isArray(entity)) {\n clone = _toConsumableArray(entity);\n } else {\n clone = _objectSpread({}, entity);\n }\n\n // Delete prop if `removeIfUndefined` and value is undefined\n if (removeIfUndefined && value === undefined && restPath.length === 1) {\n delete clone[path][restPath[0]];\n } else {\n clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);\n }\n return clone;\n}\nexport default function set(entity, paths, value) {\n var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n // Do nothing if `removeIfUndefined` and parent object not exist\n if (paths.length && removeIfUndefined && value === undefined && !get(entity, paths.slice(0, -1))) {\n return entity;\n }\n return internalSet(entity, paths, value, removeIfUndefined);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nfunction cloneDeep(val) {\n if (Array.isArray(val)) {\n return cloneArrayDeep(val);\n } else if (_typeof(val) === 'object' && val !== null) {\n return cloneObjectDeep(val);\n }\n return val;\n}\nfunction cloneObjectDeep(val) {\n if (Object.getPrototypeOf(val) === Object.prototype) {\n var res = {};\n for (var key in val) {\n res[key] = cloneDeep(val[key]);\n }\n return res;\n }\n return val;\n}\nfunction cloneArrayDeep(val) {\n return val.map(function (item) {\n return cloneDeep(item);\n });\n}\nexport default cloneDeep;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport get from \"rc-util/es/utils/get\";\nimport set from \"rc-util/es/utils/set\";\nimport { toArray } from './typeUtil';\nimport cloneDeep from '../utils/cloneDeep';\n/**\n * Convert name to internal supported format.\n * This function should keep since we still thinking if need support like `a.b.c` format.\n * 'a' => ['a']\n * 123 => [123]\n * ['a', 123] => ['a', 123]\n */\nexport function getNamePath(path) {\n return toArray(path);\n}\nexport function getValue(store, namePath) {\n var value = get(store, namePath);\n return value;\n}\nexport function setValue(store, namePath, value) {\n var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var newStore = set(store, namePath, value, removeIfUndefined);\n return newStore;\n}\nexport function cloneByNamePathList(store, namePathList) {\n var newStore = {};\n namePathList.forEach(function (namePath) {\n var value = getValue(store, namePath);\n newStore = setValue(newStore, namePath, value);\n });\n return newStore;\n}\nexport function containsNamePath(namePathList, namePath) {\n return namePathList && namePathList.some(function (path) {\n return matchNamePath(path, namePath);\n });\n}\nfunction isObject(obj) {\n return _typeof(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\n/**\n * Copy values into store and return a new values object\n * ({ a: 1, b: { c: 2 } }, { a: 4, b: { d: 5 } }) => { a: 4, b: { c: 2, d: 5 } }\n */\nfunction internalSetValues(store, values) {\n var newStore = Array.isArray(store) ? _toConsumableArray(store) : _objectSpread({}, store);\n if (!values) {\n return newStore;\n }\n Object.keys(values).forEach(function (key) {\n var prevValue = newStore[key];\n var value = values[key];\n // If both are object (but target is not array), we use recursion to set deep value\n var recursive = isObject(prevValue) && isObject(value);\n newStore[key] = recursive ? internalSetValues(prevValue, value || {}) : cloneDeep(value); // Clone deep for arrays\n });\n\n return newStore;\n}\nexport function setValues(store) {\n for (var _len = arguments.length, restValues = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n restValues[_key - 1] = arguments[_key];\n }\n return restValues.reduce(function (current, newStore) {\n return internalSetValues(current, newStore);\n }, store);\n}\nexport function matchNamePath(namePath, changedNamePath) {\n if (!namePath || !changedNamePath || namePath.length !== changedNamePath.length) {\n return false;\n }\n return namePath.every(function (nameUnit, i) {\n return changedNamePath[i] === nameUnit;\n });\n}\nexport function isSimilar(source, target) {\n if (source === target) {\n return true;\n }\n if (!source && target || source && !target) {\n return false;\n }\n if (!source || !target || _typeof(source) !== 'object' || _typeof(target) !== 'object') {\n return false;\n }\n var sourceKeys = Object.keys(source);\n var targetKeys = Object.keys(target);\n var keys = new Set([].concat(sourceKeys, targetKeys));\n return _toConsumableArray(keys).every(function (key) {\n var sourceValue = source[key];\n var targetValue = target[key];\n if (typeof sourceValue === 'function' && typeof targetValue === 'function') {\n return true;\n }\n return sourceValue === targetValue;\n });\n}\nexport function defaultGetValueFromEvent(valuePropName) {\n var event = arguments.length <= 1 ? undefined : arguments[1];\n if (event && event.target && _typeof(event.target) === 'object' && valuePropName in event.target) {\n return event.target[valuePropName];\n }\n return event;\n}\n/**\n * Moves an array item from one position in an array to another.\n *\n * Note: This is a pure function so a new array will be returned, instead\n * of altering the array argument.\n *\n * @param array Array in which to move an item. (required)\n * @param moveIndex The index of the item to move. (required)\n * @param toIndex The index to move item at moveIndex to. (required)\n */\nexport function move(array, moveIndex, toIndex) {\n var length = array.length;\n if (moveIndex < 0 || moveIndex >= length || toIndex < 0 || toIndex >= length) {\n return array;\n }\n var item = array[moveIndex];\n var diff = moveIndex - toIndex;\n if (diff > 0) {\n // move left\n return [].concat(_toConsumableArray(array.slice(0, toIndex)), [item], _toConsumableArray(array.slice(toIndex, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, length)));\n }\n if (diff < 0) {\n // move right\n return [].concat(_toConsumableArray(array.slice(0, moveIndex)), _toConsumableArray(array.slice(moveIndex + 1, toIndex + 1)), [item], _toConsumableArray(array.slice(toIndex + 1, length)));\n }\n return array;\n}","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport RawAsyncValidator from 'async-validator';\nimport * as React from 'react';\nimport warning from \"rc-util/es/warning\";\nimport { defaultValidateMessages } from './messages';\nimport { setValues } from './valueUtil';\n// Remove incorrect original ts define\nvar AsyncValidator = RawAsyncValidator;\n/**\n * Replace with template.\n * `I'm ${name}` + { name: 'bamboo' } = I'm bamboo\n */\nfunction replaceMessage(template, kv) {\n return template.replace(/\\$\\{\\w+\\}/g, function (str) {\n var key = str.slice(2, -1);\n return kv[key];\n });\n}\nvar CODE_LOGIC_ERROR = 'CODE_LOGIC_ERROR';\nfunction validateRule(_x, _x2, _x3, _x4, _x5) {\n return _validateRule.apply(this, arguments);\n}\n/**\n * We use `async-validator` to validate the value.\n * But only check one value in a time to avoid namePath validate issue.\n */\nfunction _validateRule() {\n _validateRule = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(name, value, rule, options, messageVariables) {\n var cloneRule, originValidator, subRuleField, validator, messages, result, subResults, kv, fillVariableResult;\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n cloneRule = _objectSpread({}, rule); // Bug of `async-validator`\n // https://github.com/react-component/field-form/issues/316\n // https://github.com/react-component/field-form/issues/313\n delete cloneRule.ruleIndex;\n if (cloneRule.validator) {\n originValidator = cloneRule.validator;\n cloneRule.validator = function () {\n try {\n return originValidator.apply(void 0, arguments);\n } catch (error) {\n console.error(error);\n return Promise.reject(CODE_LOGIC_ERROR);\n }\n };\n }\n // We should special handle array validate\n subRuleField = null;\n if (cloneRule && cloneRule.type === 'array' && cloneRule.defaultField) {\n subRuleField = cloneRule.defaultField;\n delete cloneRule.defaultField;\n }\n validator = new AsyncValidator(_defineProperty({}, name, [cloneRule]));\n messages = setValues({}, defaultValidateMessages, options.validateMessages);\n validator.messages(messages);\n result = [];\n _context2.prev = 9;\n _context2.next = 12;\n return Promise.resolve(validator.validate(_defineProperty({}, name, value), _objectSpread({}, options)));\n case 12:\n _context2.next = 17;\n break;\n case 14:\n _context2.prev = 14;\n _context2.t0 = _context2[\"catch\"](9);\n if (_context2.t0.errors) {\n result = _context2.t0.errors.map(function (_ref4, index) {\n var message = _ref4.message;\n var mergedMessage = message === CODE_LOGIC_ERROR ? messages.default : message;\n return /*#__PURE__*/React.isValidElement(mergedMessage) ?\n /*#__PURE__*/\n // Wrap ReactNode with `key`\n React.cloneElement(mergedMessage, {\n key: \"error_\".concat(index)\n }) : mergedMessage;\n });\n }\n case 17:\n if (!(!result.length && subRuleField)) {\n _context2.next = 22;\n break;\n }\n _context2.next = 20;\n return Promise.all(value.map(function (subValue, i) {\n return validateRule(\"\".concat(name, \".\").concat(i), subValue, subRuleField, options, messageVariables);\n }));\n case 20:\n subResults = _context2.sent;\n return _context2.abrupt(\"return\", subResults.reduce(function (prev, errors) {\n return [].concat(_toConsumableArray(prev), _toConsumableArray(errors));\n }, []));\n case 22:\n // Replace message with variables\n kv = _objectSpread(_objectSpread({}, rule), {}, {\n name: name,\n enum: (rule.enum || []).join(', ')\n }, messageVariables);\n fillVariableResult = result.map(function (error) {\n if (typeof error === 'string') {\n return replaceMessage(error, kv);\n }\n return error;\n });\n return _context2.abrupt(\"return\", fillVariableResult);\n case 25:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[9, 14]]);\n }));\n return _validateRule.apply(this, arguments);\n}\nexport function validateRules(namePath, value, rules, options, validateFirst, messageVariables) {\n var name = namePath.join('.');\n // Fill rule with context\n var filledRules = rules.map(function (currentRule, ruleIndex) {\n var originValidatorFunc = currentRule.validator;\n var cloneRule = _objectSpread(_objectSpread({}, currentRule), {}, {\n ruleIndex: ruleIndex\n });\n // Replace validator if needed\n if (originValidatorFunc) {\n cloneRule.validator = function (rule, val, callback) {\n var hasPromise = false;\n // Wrap callback only accept when promise not provided\n var wrappedCallback = function wrappedCallback() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n // Wait a tick to make sure return type is a promise\n Promise.resolve().then(function () {\n warning(!hasPromise, 'Your validator function has already return a promise. `callback` will be ignored.');\n if (!hasPromise) {\n callback.apply(void 0, args);\n }\n });\n };\n // Get promise\n var promise = originValidatorFunc(rule, val, wrappedCallback);\n hasPromise = promise && typeof promise.then === 'function' && typeof promise.catch === 'function';\n /**\n * 1. Use promise as the first priority.\n * 2. If promise not exist, use callback with warning instead\n */\n warning(hasPromise, '`callback` is deprecated. Please return a promise instead.');\n if (hasPromise) {\n promise.then(function () {\n callback();\n }).catch(function (err) {\n callback(err || ' ');\n });\n }\n };\n }\n return cloneRule;\n }).sort(function (_ref, _ref2) {\n var w1 = _ref.warningOnly,\n i1 = _ref.ruleIndex;\n var w2 = _ref2.warningOnly,\n i2 = _ref2.ruleIndex;\n if (!!w1 === !!w2) {\n // Let keep origin order\n return i1 - i2;\n }\n if (w1) {\n return 1;\n }\n return -1;\n });\n // Do validate rules\n var summaryPromise;\n if (validateFirst === true) {\n // >>>>> Validate by serialization\n summaryPromise = new Promise( /*#__PURE__*/function () {\n var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(resolve, reject) {\n var i, rule, errors;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n i = 0;\n case 1:\n if (!(i < filledRules.length)) {\n _context.next = 12;\n break;\n }\n rule = filledRules[i];\n _context.next = 5;\n return validateRule(name, value, rule, options, messageVariables);\n case 5:\n errors = _context.sent;\n if (!errors.length) {\n _context.next = 9;\n break;\n }\n reject([{\n errors: errors,\n rule: rule\n }]);\n return _context.abrupt(\"return\");\n case 9:\n i += 1;\n _context.next = 1;\n break;\n case 12:\n /* eslint-enable */\n resolve([]);\n case 13:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function (_x6, _x7) {\n return _ref3.apply(this, arguments);\n };\n }());\n } else {\n // >>>>> Validate by parallel\n var rulePromises = filledRules.map(function (rule) {\n return validateRule(name, value, rule, options, messageVariables).then(function (errors) {\n return {\n errors: errors,\n rule: rule\n };\n });\n });\n summaryPromise = (validateFirst ? finishOnFirstFailed(rulePromises) : finishOnAllFailed(rulePromises)).then(function (errors) {\n // Always change to rejection for Field to catch\n return Promise.reject(errors);\n });\n }\n // Internal catch error to avoid console error log.\n summaryPromise.catch(function (e) {\n return e;\n });\n return summaryPromise;\n}\nfunction finishOnAllFailed(_x8) {\n return _finishOnAllFailed.apply(this, arguments);\n}\nfunction _finishOnAllFailed() {\n _finishOnAllFailed = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(rulePromises) {\n return _regeneratorRuntime().wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n return _context3.abrupt(\"return\", Promise.all(rulePromises).then(function (errorsList) {\n var _ref5;\n var errors = (_ref5 = []).concat.apply(_ref5, _toConsumableArray(errorsList));\n return errors;\n }));\n case 1:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3);\n }));\n return _finishOnAllFailed.apply(this, arguments);\n}\nfunction finishOnFirstFailed(_x9) {\n return _finishOnFirstFailed.apply(this, arguments);\n}\nfunction _finishOnFirstFailed() {\n _finishOnFirstFailed = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(rulePromises) {\n var count;\n return _regeneratorRuntime().wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n count = 0;\n return _context4.abrupt(\"return\", new Promise(function (resolve) {\n rulePromises.forEach(function (promise) {\n promise.then(function (ruleError) {\n if (ruleError.errors.length) {\n resolve([ruleError]);\n }\n count += 1;\n if (count === rulePromises.length) {\n resolve([]);\n }\n });\n });\n }));\n case 2:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4);\n }));\n return _finishOnFirstFailed.apply(this, arguments);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nvar _excluded = [\"name\"];\nimport toChildrenArray from \"rc-util/es/Children/toArray\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport FieldContext, { HOOK_MARK } from './FieldContext';\nimport { toArray } from './utils/typeUtil';\nimport { validateRules } from './utils/validateUtil';\nimport { containsNamePath, defaultGetValueFromEvent, getNamePath, getValue } from './utils/valueUtil';\nvar EMPTY_ERRORS = [];\nfunction requireUpdate(shouldUpdate, prev, next, prevValue, nextValue, info) {\n if (typeof shouldUpdate === 'function') {\n return shouldUpdate(prev, next, 'source' in info ? {\n source: info.source\n } : {});\n }\n return prevValue !== nextValue;\n}\n// We use Class instead of Hooks here since it will cost much code by using Hooks.\nvar Field = /*#__PURE__*/function (_React$Component) {\n _inherits(Field, _React$Component);\n var _super = _createSuper(Field);\n /**\n * Follow state should not management in State since it will async update by React.\n * This makes first render of form can not get correct state value.\n */\n\n /**\n * Mark when touched & validated. Currently only used for `dependencies`.\n * Note that we do not think field with `initialValue` is dirty\n * but this will be by `isFieldDirty` func.\n */\n\n // ============================== Subscriptions ==============================\n function Field(props) {\n var _this;\n _classCallCheck(this, Field);\n _this = _super.call(this, props);\n // Register on init\n _this.state = {\n resetCount: 0\n };\n _this.cancelRegisterFunc = null;\n _this.mounted = false;\n _this.touched = false;\n _this.dirty = false;\n _this.validatePromise = null;\n _this.prevValidating = void 0;\n _this.errors = EMPTY_ERRORS;\n _this.warnings = EMPTY_ERRORS;\n _this.cancelRegister = function () {\n var _this$props = _this.props,\n preserve = _this$props.preserve,\n isListField = _this$props.isListField,\n name = _this$props.name;\n if (_this.cancelRegisterFunc) {\n _this.cancelRegisterFunc(isListField, preserve, getNamePath(name));\n }\n _this.cancelRegisterFunc = null;\n };\n _this.getNamePath = function () {\n var _this$props2 = _this.props,\n name = _this$props2.name,\n fieldContext = _this$props2.fieldContext;\n var _fieldContext$prefixN = fieldContext.prefixName,\n prefixName = _fieldContext$prefixN === void 0 ? [] : _fieldContext$prefixN;\n return name !== undefined ? [].concat(_toConsumableArray(prefixName), _toConsumableArray(name)) : [];\n };\n _this.getRules = function () {\n var _this$props3 = _this.props,\n _this$props3$rules = _this$props3.rules,\n rules = _this$props3$rules === void 0 ? [] : _this$props3$rules,\n fieldContext = _this$props3.fieldContext;\n return rules.map(function (rule) {\n if (typeof rule === 'function') {\n return rule(fieldContext);\n }\n return rule;\n });\n };\n _this.refresh = function () {\n if (!_this.mounted) return;\n /**\n * Clean up current node.\n */\n _this.setState(function (_ref) {\n var resetCount = _ref.resetCount;\n return {\n resetCount: resetCount + 1\n };\n });\n };\n _this.triggerMetaEvent = function (destroy) {\n var onMetaChange = _this.props.onMetaChange;\n onMetaChange === null || onMetaChange === void 0 ? void 0 : onMetaChange(_objectSpread(_objectSpread({}, _this.getMeta()), {}, {\n destroy: destroy\n }));\n };\n _this.onStoreChange = function (prevStore, namePathList, info) {\n var _this$props4 = _this.props,\n shouldUpdate = _this$props4.shouldUpdate,\n _this$props4$dependen = _this$props4.dependencies,\n dependencies = _this$props4$dependen === void 0 ? [] : _this$props4$dependen,\n onReset = _this$props4.onReset;\n var store = info.store;\n var namePath = _this.getNamePath();\n var prevValue = _this.getValue(prevStore);\n var curValue = _this.getValue(store);\n var namePathMatch = namePathList && containsNamePath(namePathList, namePath);\n // `setFieldsValue` is a quick access to update related status\n if (info.type === 'valueUpdate' && info.source === 'external' && prevValue !== curValue) {\n _this.touched = true;\n _this.dirty = true;\n _this.validatePromise = null;\n _this.errors = EMPTY_ERRORS;\n _this.warnings = EMPTY_ERRORS;\n _this.triggerMetaEvent();\n }\n switch (info.type) {\n case 'reset':\n if (!namePathList || namePathMatch) {\n // Clean up state\n _this.touched = false;\n _this.dirty = false;\n _this.validatePromise = null;\n _this.errors = EMPTY_ERRORS;\n _this.warnings = EMPTY_ERRORS;\n _this.triggerMetaEvent();\n onReset === null || onReset === void 0 ? void 0 : onReset();\n _this.refresh();\n return;\n }\n break;\n /**\n * In case field with `preserve = false` nest deps like:\n * - A = 1 => show B\n * - B = 1 => show C\n * - Reset A, need clean B, C\n */\n case 'remove':\n {\n if (shouldUpdate) {\n _this.reRender();\n return;\n }\n break;\n }\n case 'setField':\n {\n if (namePathMatch) {\n var data = info.data;\n if ('touched' in data) {\n _this.touched = data.touched;\n }\n if ('validating' in data && !('originRCField' in data)) {\n _this.validatePromise = data.validating ? Promise.resolve([]) : null;\n }\n if ('errors' in data) {\n _this.errors = data.errors || EMPTY_ERRORS;\n }\n if ('warnings' in data) {\n _this.warnings = data.warnings || EMPTY_ERRORS;\n }\n _this.dirty = true;\n _this.triggerMetaEvent();\n _this.reRender();\n return;\n }\n // Handle update by `setField` with `shouldUpdate`\n if (shouldUpdate && !namePath.length && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {\n _this.reRender();\n return;\n }\n break;\n }\n case 'dependenciesUpdate':\n {\n /**\n * Trigger when marked `dependencies` updated. Related fields will all update\n */\n var dependencyList = dependencies.map(getNamePath);\n // No need for `namePathMath` check and `shouldUpdate` check, since `valueUpdate` will be\n // emitted earlier and they will work there\n // If set it may cause unnecessary twice rerendering\n if (dependencyList.some(function (dependency) {\n return containsNamePath(info.relatedFields, dependency);\n })) {\n _this.reRender();\n return;\n }\n break;\n }\n default:\n // 1. If `namePath` exists in `namePathList`, means it's related value and should update\n // For example \n // If `namePathList` is [['list']] (List value update), Field should be updated\n // If `namePathList` is [['list', 0]] (Field value update), List shouldn't be updated\n // 2.\n // 2.1 If `dependencies` is set, `name` is not set and `shouldUpdate` is not set,\n // don't use `shouldUpdate`. `dependencies` is view as a shortcut if `shouldUpdate`\n // is not provided\n // 2.2 If `shouldUpdate` provided, use customize logic to update the field\n // else to check if value changed\n if (namePathMatch || (!dependencies.length || namePath.length || shouldUpdate) && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {\n _this.reRender();\n return;\n }\n break;\n }\n if (shouldUpdate === true) {\n _this.reRender();\n }\n };\n _this.validateRules = function (options) {\n // We should fixed namePath & value to avoid developer change then by form function\n var namePath = _this.getNamePath();\n var currentValue = _this.getValue();\n // Force change to async to avoid rule OOD under renderProps field\n var rootPromise = Promise.resolve().then(function () {\n if (!_this.mounted) {\n return [];\n }\n var _this$props5 = _this.props,\n _this$props5$validate = _this$props5.validateFirst,\n validateFirst = _this$props5$validate === void 0 ? false : _this$props5$validate,\n messageVariables = _this$props5.messageVariables;\n var _ref2 = options || {},\n triggerName = _ref2.triggerName;\n var filteredRules = _this.getRules();\n if (triggerName) {\n filteredRules = filteredRules.filter(function (rule) {\n return rule;\n }).filter(function (rule) {\n var validateTrigger = rule.validateTrigger;\n if (!validateTrigger) {\n return true;\n }\n var triggerList = toArray(validateTrigger);\n return triggerList.includes(triggerName);\n });\n }\n var promise = validateRules(namePath, currentValue, filteredRules, options, validateFirst, messageVariables);\n promise.catch(function (e) {\n return e;\n }).then(function () {\n var ruleErrors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ERRORS;\n if (_this.validatePromise === rootPromise) {\n var _ruleErrors$forEach;\n _this.validatePromise = null;\n // Get errors & warnings\n var nextErrors = [];\n var nextWarnings = [];\n (_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 ? void 0 : _ruleErrors$forEach.call(ruleErrors, function (_ref3) {\n var warningOnly = _ref3.rule.warningOnly,\n _ref3$errors = _ref3.errors,\n errors = _ref3$errors === void 0 ? EMPTY_ERRORS : _ref3$errors;\n if (warningOnly) {\n nextWarnings.push.apply(nextWarnings, _toConsumableArray(errors));\n } else {\n nextErrors.push.apply(nextErrors, _toConsumableArray(errors));\n }\n });\n _this.errors = nextErrors;\n _this.warnings = nextWarnings;\n _this.triggerMetaEvent();\n _this.reRender();\n }\n });\n return promise;\n });\n _this.validatePromise = rootPromise;\n _this.dirty = true;\n _this.errors = EMPTY_ERRORS;\n _this.warnings = EMPTY_ERRORS;\n _this.triggerMetaEvent();\n // Force trigger re-render since we need sync renderProps with new meta\n _this.reRender();\n return rootPromise;\n };\n _this.isFieldValidating = function () {\n return !!_this.validatePromise;\n };\n _this.isFieldTouched = function () {\n return _this.touched;\n };\n _this.isFieldDirty = function () {\n // Touched or validate or has initialValue\n if (_this.dirty || _this.props.initialValue !== undefined) {\n return true;\n }\n // Form set initialValue\n var fieldContext = _this.props.fieldContext;\n var _fieldContext$getInte = fieldContext.getInternalHooks(HOOK_MARK),\n getInitialValue = _fieldContext$getInte.getInitialValue;\n if (getInitialValue(_this.getNamePath()) !== undefined) {\n return true;\n }\n return false;\n };\n _this.getErrors = function () {\n return _this.errors;\n };\n _this.getWarnings = function () {\n return _this.warnings;\n };\n _this.isListField = function () {\n return _this.props.isListField;\n };\n _this.isList = function () {\n return _this.props.isList;\n };\n _this.isPreserve = function () {\n return _this.props.preserve;\n };\n _this.getMeta = function () {\n // Make error & validating in cache to save perf\n _this.prevValidating = _this.isFieldValidating();\n var meta = {\n touched: _this.isFieldTouched(),\n validating: _this.prevValidating,\n errors: _this.errors,\n warnings: _this.warnings,\n name: _this.getNamePath()\n };\n return meta;\n };\n _this.getOnlyChild = function (children) {\n // Support render props\n if (typeof children === 'function') {\n var meta = _this.getMeta();\n return _objectSpread(_objectSpread({}, _this.getOnlyChild(children(_this.getControlled(), meta, _this.props.fieldContext))), {}, {\n isFunction: true\n });\n }\n // Filed element only\n var childList = toChildrenArray(children);\n if (childList.length !== 1 || ! /*#__PURE__*/React.isValidElement(childList[0])) {\n return {\n child: childList,\n isFunction: false\n };\n }\n return {\n child: childList[0],\n isFunction: false\n };\n };\n _this.getValue = function (store) {\n var getFieldsValue = _this.props.fieldContext.getFieldsValue;\n var namePath = _this.getNamePath();\n return getValue(store || getFieldsValue(true), namePath);\n };\n _this.getControlled = function () {\n var childProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _this$props6 = _this.props,\n trigger = _this$props6.trigger,\n validateTrigger = _this$props6.validateTrigger,\n getValueFromEvent = _this$props6.getValueFromEvent,\n normalize = _this$props6.normalize,\n valuePropName = _this$props6.valuePropName,\n getValueProps = _this$props6.getValueProps,\n fieldContext = _this$props6.fieldContext;\n var mergedValidateTrigger = validateTrigger !== undefined ? validateTrigger : fieldContext.validateTrigger;\n var namePath = _this.getNamePath();\n var getInternalHooks = fieldContext.getInternalHooks,\n getFieldsValue = fieldContext.getFieldsValue;\n var _getInternalHooks = getInternalHooks(HOOK_MARK),\n dispatch = _getInternalHooks.dispatch;\n var value = _this.getValue();\n var mergedGetValueProps = getValueProps || function (val) {\n return _defineProperty({}, valuePropName, val);\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var originTriggerFunc = childProps[trigger];\n var control = _objectSpread(_objectSpread({}, childProps), mergedGetValueProps(value));\n // Add trigger\n control[trigger] = function () {\n // Mark as touched\n _this.touched = true;\n _this.dirty = true;\n _this.triggerMetaEvent();\n var newValue;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (getValueFromEvent) {\n newValue = getValueFromEvent.apply(void 0, args);\n } else {\n newValue = defaultGetValueFromEvent.apply(void 0, [valuePropName].concat(args));\n }\n if (normalize) {\n newValue = normalize(newValue, value, getFieldsValue(true));\n }\n dispatch({\n type: 'updateValue',\n namePath: namePath,\n value: newValue\n });\n if (originTriggerFunc) {\n originTriggerFunc.apply(void 0, args);\n }\n };\n // Add validateTrigger\n var validateTriggerList = toArray(mergedValidateTrigger || []);\n validateTriggerList.forEach(function (triggerName) {\n // Wrap additional function of component, so that we can get latest value from store\n var originTrigger = control[triggerName];\n control[triggerName] = function () {\n if (originTrigger) {\n originTrigger.apply(void 0, arguments);\n }\n // Always use latest rules\n var rules = _this.props.rules;\n if (rules && rules.length) {\n // We dispatch validate to root,\n // since it will update related data with other field with same name\n dispatch({\n type: 'validateField',\n namePath: namePath,\n triggerName: triggerName\n });\n }\n };\n });\n return control;\n };\n if (props.fieldContext) {\n var getInternalHooks = props.fieldContext.getInternalHooks;\n var _getInternalHooks2 = getInternalHooks(HOOK_MARK),\n initEntityValue = _getInternalHooks2.initEntityValue;\n initEntityValue(_assertThisInitialized(_this));\n }\n return _this;\n }\n _createClass(Field, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this$props7 = this.props,\n shouldUpdate = _this$props7.shouldUpdate,\n fieldContext = _this$props7.fieldContext;\n this.mounted = true;\n // Register on init\n if (fieldContext) {\n var getInternalHooks = fieldContext.getInternalHooks;\n var _getInternalHooks3 = getInternalHooks(HOOK_MARK),\n registerField = _getInternalHooks3.registerField;\n this.cancelRegisterFunc = registerField(this);\n }\n // One more render for component in case fields not ready\n if (shouldUpdate === true) {\n this.reRender();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.cancelRegister();\n this.triggerMetaEvent(true);\n this.mounted = false;\n }\n }, {\n key: \"reRender\",\n value: function reRender() {\n if (!this.mounted) return;\n this.forceUpdate();\n }\n }, {\n key: \"render\",\n value: function render() {\n var resetCount = this.state.resetCount;\n var children = this.props.children;\n var _this$getOnlyChild = this.getOnlyChild(children),\n child = _this$getOnlyChild.child,\n isFunction = _this$getOnlyChild.isFunction;\n // Not need to `cloneElement` since user can handle this in render function self\n var returnChildNode;\n if (isFunction) {\n returnChildNode = child;\n } else if ( /*#__PURE__*/React.isValidElement(child)) {\n returnChildNode = /*#__PURE__*/React.cloneElement(child, this.getControlled(child.props));\n } else {\n warning(!child, '`children` of Field is not validate ReactElement.');\n returnChildNode = child;\n }\n return /*#__PURE__*/React.createElement(React.Fragment, {\n key: resetCount\n }, returnChildNode);\n }\n }]);\n return Field;\n}(React.Component);\nField.contextType = FieldContext;\nField.defaultProps = {\n trigger: 'onChange',\n valuePropName: 'value'\n};\nfunction WrapperField(_ref5) {\n var name = _ref5.name,\n restProps = _objectWithoutProperties(_ref5, _excluded);\n var fieldContext = React.useContext(FieldContext);\n var namePath = name !== undefined ? getNamePath(name) : undefined;\n var key = 'keep';\n if (!restProps.isListField) {\n key = \"_\".concat((namePath || []).join('_'));\n }\n // Warning if it's a directly list field.\n // We can still support multiple level field preserve.\n if (process.env.NODE_ENV !== 'production' && restProps.preserve === false && restProps.isListField && namePath.length <= 1) {\n warning(false, '`preserve` should not apply on Form.List fields.');\n }\n return /*#__PURE__*/React.createElement(Field, _extends({\n key: key,\n name: namePath\n }, restProps, {\n fieldContext: fieldContext\n }));\n}\nexport default WrapperField;","import * as React from 'react';\nvar ListContext = /*#__PURE__*/React.createContext(null);\nexport default ListContext;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport * as React from 'react';\nimport warning from \"rc-util/es/warning\";\nimport FieldContext from './FieldContext';\nimport Field from './Field';\nimport { move as _move, getNamePath } from './utils/valueUtil';\nimport ListContext from './ListContext';\nvar List = function List(_ref) {\n var name = _ref.name,\n initialValue = _ref.initialValue,\n children = _ref.children,\n rules = _ref.rules,\n validateTrigger = _ref.validateTrigger;\n var context = React.useContext(FieldContext);\n var keyRef = React.useRef({\n keys: [],\n id: 0\n });\n var keyManager = keyRef.current;\n var prefixName = React.useMemo(function () {\n var parentPrefixName = getNamePath(context.prefixName) || [];\n return [].concat(_toConsumableArray(parentPrefixName), _toConsumableArray(getNamePath(name)));\n }, [context.prefixName, name]);\n var fieldContext = React.useMemo(function () {\n return _objectSpread(_objectSpread({}, context), {}, {\n prefixName: prefixName\n });\n }, [context, prefixName]);\n // List context\n var listContext = React.useMemo(function () {\n return {\n getKey: function getKey(namePath) {\n var len = prefixName.length;\n var pathName = namePath[len];\n return [keyManager.keys[pathName], namePath.slice(len + 1)];\n }\n };\n }, [prefixName]);\n // User should not pass `children` as other type.\n if (typeof children !== 'function') {\n warning(false, 'Form.List only accepts function as children.');\n return null;\n }\n var shouldUpdate = function shouldUpdate(prevValue, nextValue, _ref2) {\n var source = _ref2.source;\n if (source === 'internal') {\n return false;\n }\n return prevValue !== nextValue;\n };\n return /*#__PURE__*/React.createElement(ListContext.Provider, {\n value: listContext\n }, /*#__PURE__*/React.createElement(FieldContext.Provider, {\n value: fieldContext\n }, /*#__PURE__*/React.createElement(Field, {\n name: [],\n shouldUpdate: shouldUpdate,\n rules: rules,\n validateTrigger: validateTrigger,\n initialValue: initialValue,\n isList: true\n }, function (_ref3, meta) {\n var _ref3$value = _ref3.value,\n value = _ref3$value === void 0 ? [] : _ref3$value,\n onChange = _ref3.onChange;\n var getFieldValue = context.getFieldValue;\n var getNewValue = function getNewValue() {\n var values = getFieldValue(prefixName || []);\n return values || [];\n };\n /**\n * Always get latest value in case user update fields by `form` api.\n */\n var operations = {\n add: function add(defaultValue, index) {\n // Mapping keys\n var newValue = getNewValue();\n if (index >= 0 && index <= newValue.length) {\n keyManager.keys = [].concat(_toConsumableArray(keyManager.keys.slice(0, index)), [keyManager.id], _toConsumableArray(keyManager.keys.slice(index)));\n onChange([].concat(_toConsumableArray(newValue.slice(0, index)), [defaultValue], _toConsumableArray(newValue.slice(index))));\n } else {\n if (process.env.NODE_ENV !== 'production' && (index < 0 || index > newValue.length)) {\n warning(false, 'The second parameter of the add function should be a valid positive number.');\n }\n keyManager.keys = [].concat(_toConsumableArray(keyManager.keys), [keyManager.id]);\n onChange([].concat(_toConsumableArray(newValue), [defaultValue]));\n }\n keyManager.id += 1;\n },\n remove: function remove(index) {\n var newValue = getNewValue();\n var indexSet = new Set(Array.isArray(index) ? index : [index]);\n if (indexSet.size <= 0) {\n return;\n }\n keyManager.keys = keyManager.keys.filter(function (_, keysIndex) {\n return !indexSet.has(keysIndex);\n });\n // Trigger store change\n onChange(newValue.filter(function (_, valueIndex) {\n return !indexSet.has(valueIndex);\n }));\n },\n move: function move(from, to) {\n if (from === to) {\n return;\n }\n var newValue = getNewValue();\n // Do not handle out of range\n if (from < 0 || from >= newValue.length || to < 0 || to >= newValue.length) {\n return;\n }\n keyManager.keys = _move(keyManager.keys, from, to);\n // Trigger store change\n onChange(_move(newValue, from, to));\n }\n };\n var listValue = value || [];\n if (!Array.isArray(listValue)) {\n listValue = [];\n if (process.env.NODE_ENV !== 'production') {\n warning(false, \"Current value of '\".concat(prefixName.join(' > '), \"' is not an array type.\"));\n }\n }\n return children(listValue.map(function (__, index) {\n var key = keyManager.keys[index];\n if (key === undefined) {\n keyManager.keys[index] = keyManager.id;\n key = keyManager.keys[index];\n keyManager.id += 1;\n }\n return {\n name: index,\n key: key,\n isListField: true\n };\n }), operations, meta);\n })));\n};\nexport default List;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nvar SPLIT = '__@field_split__';\n/**\n * Convert name path into string to fast the fetch speed of Map.\n */\nfunction normalize(namePath) {\n return namePath.map(function (cell) {\n return \"\".concat(_typeof(cell), \":\").concat(cell);\n })\n // Magic split\n .join(SPLIT);\n}\n/**\n * NameMap like a `Map` but accepts `string[]` as key.\n */\nvar NameMap = /*#__PURE__*/function () {\n function NameMap() {\n _classCallCheck(this, NameMap);\n this.kvs = new Map();\n }\n _createClass(NameMap, [{\n key: \"set\",\n value: function set(key, value) {\n this.kvs.set(normalize(key), value);\n }\n }, {\n key: \"get\",\n value: function get(key) {\n return this.kvs.get(normalize(key));\n }\n }, {\n key: \"update\",\n value: function update(key, updater) {\n var origin = this.get(key);\n var next = updater(origin);\n if (!next) {\n this.delete(key);\n } else {\n this.set(key, next);\n }\n }\n }, {\n key: \"delete\",\n value: function _delete(key) {\n this.kvs.delete(normalize(key));\n }\n // Since we only use this in test, let simply realize this\n }, {\n key: \"map\",\n value: function map(callback) {\n return _toConsumableArray(this.kvs.entries()).map(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n key = _ref2[0],\n value = _ref2[1];\n var cells = key.split(SPLIT);\n return callback({\n key: cells.map(function (cell) {\n var _cell$match = cell.match(/^([^:]*):(.*)$/),\n _cell$match2 = _slicedToArray(_cell$match, 3),\n type = _cell$match2[1],\n unit = _cell$match2[2];\n return type === 'number' ? Number(unit) : unit;\n }),\n value: value\n });\n });\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var json = {};\n this.map(function (_ref3) {\n var key = _ref3.key,\n value = _ref3.value;\n json[key.join('.')] = value;\n return null;\n });\n return json;\n }\n }]);\n return NameMap;\n}();\nexport default NameMap;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nvar _excluded = [\"name\", \"errors\"];\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport { HOOK_MARK } from './FieldContext';\nimport { allPromiseFinish } from './utils/asyncUtil';\nimport cloneDeep from './utils/cloneDeep';\nimport { defaultValidateMessages } from './utils/messages';\nimport NameMap from './utils/NameMap';\nimport { cloneByNamePathList, containsNamePath, getNamePath, getValue, matchNamePath, setValue, setValues } from './utils/valueUtil';\nexport var FormStore = /*#__PURE__*/_createClass(function FormStore(forceRootUpdate) {\n var _this = this;\n _classCallCheck(this, FormStore);\n this.formHooked = false;\n this.forceRootUpdate = void 0;\n this.subscribable = true;\n this.store = {};\n this.fieldEntities = [];\n this.initialValues = {};\n this.callbacks = {};\n this.validateMessages = null;\n this.preserve = null;\n this.lastValidatePromise = null;\n this.getForm = function () {\n return {\n getFieldValue: _this.getFieldValue,\n getFieldsValue: _this.getFieldsValue,\n getFieldError: _this.getFieldError,\n getFieldWarning: _this.getFieldWarning,\n getFieldsError: _this.getFieldsError,\n isFieldsTouched: _this.isFieldsTouched,\n isFieldTouched: _this.isFieldTouched,\n isFieldValidating: _this.isFieldValidating,\n isFieldsValidating: _this.isFieldsValidating,\n resetFields: _this.resetFields,\n setFields: _this.setFields,\n setFieldValue: _this.setFieldValue,\n setFieldsValue: _this.setFieldsValue,\n validateFields: _this.validateFields,\n submit: _this.submit,\n _init: true,\n getInternalHooks: _this.getInternalHooks\n };\n };\n this.getInternalHooks = function (key) {\n if (key === HOOK_MARK) {\n _this.formHooked = true;\n return {\n dispatch: _this.dispatch,\n initEntityValue: _this.initEntityValue,\n registerField: _this.registerField,\n useSubscribe: _this.useSubscribe,\n setInitialValues: _this.setInitialValues,\n destroyForm: _this.destroyForm,\n setCallbacks: _this.setCallbacks,\n setValidateMessages: _this.setValidateMessages,\n getFields: _this.getFields,\n setPreserve: _this.setPreserve,\n getInitialValue: _this.getInitialValue,\n registerWatch: _this.registerWatch\n };\n }\n warning(false, '`getInternalHooks` is internal usage. Should not call directly.');\n return null;\n };\n this.useSubscribe = function (subscribable) {\n _this.subscribable = subscribable;\n };\n this.prevWithoutPreserves = null;\n this.setInitialValues = function (initialValues, init) {\n _this.initialValues = initialValues || {};\n if (init) {\n var _this$prevWithoutPres;\n var nextStore = setValues({}, initialValues, _this.store);\n // We will take consider prev form unmount fields.\n // When the field is not `preserve`, we need fill this with initialValues instead of store.\n // eslint-disable-next-line array-callback-return\n (_this$prevWithoutPres = _this.prevWithoutPreserves) === null || _this$prevWithoutPres === void 0 ? void 0 : _this$prevWithoutPres.map(function (_ref) {\n var namePath = _ref.key;\n nextStore = setValue(nextStore, namePath, getValue(initialValues, namePath));\n });\n _this.prevWithoutPreserves = null;\n _this.updateStore(nextStore);\n }\n };\n this.destroyForm = function () {\n var prevWithoutPreserves = new NameMap();\n _this.getFieldEntities(true).forEach(function (entity) {\n if (!_this.isMergedPreserve(entity.isPreserve())) {\n prevWithoutPreserves.set(entity.getNamePath(), true);\n }\n });\n _this.prevWithoutPreserves = prevWithoutPreserves;\n };\n this.getInitialValue = function (namePath) {\n var initValue = getValue(_this.initialValues, namePath);\n // Not cloneDeep when without `namePath`\n return namePath.length ? cloneDeep(initValue) : initValue;\n };\n this.setCallbacks = function (callbacks) {\n _this.callbacks = callbacks;\n };\n this.setValidateMessages = function (validateMessages) {\n _this.validateMessages = validateMessages;\n };\n this.setPreserve = function (preserve) {\n _this.preserve = preserve;\n };\n this.watchList = [];\n this.registerWatch = function (callback) {\n _this.watchList.push(callback);\n return function () {\n _this.watchList = _this.watchList.filter(function (fn) {\n return fn !== callback;\n });\n };\n };\n this.notifyWatch = function () {\n var namePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n // No need to cost perf when nothing need to watch\n if (_this.watchList.length) {\n var values = _this.getFieldsValue();\n _this.watchList.forEach(function (callback) {\n callback(values, namePath);\n });\n }\n };\n this.timeoutId = null;\n this.warningUnhooked = function () {\n if (process.env.NODE_ENV !== 'production' && !_this.timeoutId && typeof window !== 'undefined') {\n _this.timeoutId = setTimeout(function () {\n _this.timeoutId = null;\n if (!_this.formHooked) {\n warning(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?');\n }\n });\n }\n };\n this.updateStore = function (nextStore) {\n _this.store = nextStore;\n };\n this.getFieldEntities = function () {\n var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (!pure) {\n return _this.fieldEntities;\n }\n return _this.fieldEntities.filter(function (field) {\n return field.getNamePath().length;\n });\n };\n this.getFieldsMap = function () {\n var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var cache = new NameMap();\n _this.getFieldEntities(pure).forEach(function (field) {\n var namePath = field.getNamePath();\n cache.set(namePath, field);\n });\n return cache;\n };\n this.getFieldEntitiesForNamePathList = function (nameList) {\n if (!nameList) {\n return _this.getFieldEntities(true);\n }\n var cache = _this.getFieldsMap(true);\n return nameList.map(function (name) {\n var namePath = getNamePath(name);\n return cache.get(namePath) || {\n INVALIDATE_NAME_PATH: getNamePath(name)\n };\n });\n };\n this.getFieldsValue = function (nameList, filterFunc) {\n _this.warningUnhooked();\n if (nameList === true && !filterFunc) {\n return _this.store;\n }\n var fieldEntities = _this.getFieldEntitiesForNamePathList(Array.isArray(nameList) ? nameList : null);\n var filteredNameList = [];\n fieldEntities.forEach(function (entity) {\n var _entity$isListField;\n var namePath = 'INVALIDATE_NAME_PATH' in entity ? entity.INVALIDATE_NAME_PATH : entity.getNamePath();\n // Ignore when it's a list item and not specific the namePath,\n // since parent field is already take in count\n if (!nameList && ((_entity$isListField = entity.isListField) === null || _entity$isListField === void 0 ? void 0 : _entity$isListField.call(entity))) {\n return;\n }\n if (!filterFunc) {\n filteredNameList.push(namePath);\n } else {\n var meta = 'getMeta' in entity ? entity.getMeta() : null;\n if (filterFunc(meta)) {\n filteredNameList.push(namePath);\n }\n }\n });\n return cloneByNamePathList(_this.store, filteredNameList.map(getNamePath));\n };\n this.getFieldValue = function (name) {\n _this.warningUnhooked();\n var namePath = getNamePath(name);\n return getValue(_this.store, namePath);\n };\n this.getFieldsError = function (nameList) {\n _this.warningUnhooked();\n var fieldEntities = _this.getFieldEntitiesForNamePathList(nameList);\n return fieldEntities.map(function (entity, index) {\n if (entity && !('INVALIDATE_NAME_PATH' in entity)) {\n return {\n name: entity.getNamePath(),\n errors: entity.getErrors(),\n warnings: entity.getWarnings()\n };\n }\n return {\n name: getNamePath(nameList[index]),\n errors: [],\n warnings: []\n };\n });\n };\n this.getFieldError = function (name) {\n _this.warningUnhooked();\n var namePath = getNamePath(name);\n var fieldError = _this.getFieldsError([namePath])[0];\n return fieldError.errors;\n };\n this.getFieldWarning = function (name) {\n _this.warningUnhooked();\n var namePath = getNamePath(name);\n var fieldError = _this.getFieldsError([namePath])[0];\n return fieldError.warnings;\n };\n this.isFieldsTouched = function () {\n _this.warningUnhooked();\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var arg0 = args[0],\n arg1 = args[1];\n var namePathList;\n var isAllFieldsTouched = false;\n if (args.length === 0) {\n namePathList = null;\n } else if (args.length === 1) {\n if (Array.isArray(arg0)) {\n namePathList = arg0.map(getNamePath);\n isAllFieldsTouched = false;\n } else {\n namePathList = null;\n isAllFieldsTouched = arg0;\n }\n } else {\n namePathList = arg0.map(getNamePath);\n isAllFieldsTouched = arg1;\n }\n var fieldEntities = _this.getFieldEntities(true);\n var isFieldTouched = function isFieldTouched(field) {\n return field.isFieldTouched();\n };\n // ===== Will get fully compare when not config namePathList =====\n if (!namePathList) {\n return isAllFieldsTouched ? fieldEntities.every(isFieldTouched) : fieldEntities.some(isFieldTouched);\n }\n // Generate a nest tree for validate\n var map = new NameMap();\n namePathList.forEach(function (shortNamePath) {\n map.set(shortNamePath, []);\n });\n fieldEntities.forEach(function (field) {\n var fieldNamePath = field.getNamePath();\n // Find matched entity and put into list\n namePathList.forEach(function (shortNamePath) {\n if (shortNamePath.every(function (nameUnit, i) {\n return fieldNamePath[i] === nameUnit;\n })) {\n map.update(shortNamePath, function (list) {\n return [].concat(_toConsumableArray(list), [field]);\n });\n }\n });\n });\n // Check if NameMap value is touched\n var isNamePathListTouched = function isNamePathListTouched(entities) {\n return entities.some(isFieldTouched);\n };\n var namePathListEntities = map.map(function (_ref2) {\n var value = _ref2.value;\n return value;\n });\n return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched);\n };\n this.isFieldTouched = function (name) {\n _this.warningUnhooked();\n return _this.isFieldsTouched([name]);\n };\n this.isFieldsValidating = function (nameList) {\n _this.warningUnhooked();\n var fieldEntities = _this.getFieldEntities();\n if (!nameList) {\n return fieldEntities.some(function (testField) {\n return testField.isFieldValidating();\n });\n }\n var namePathList = nameList.map(getNamePath);\n return fieldEntities.some(function (testField) {\n var fieldNamePath = testField.getNamePath();\n return containsNamePath(namePathList, fieldNamePath) && testField.isFieldValidating();\n });\n };\n this.isFieldValidating = function (name) {\n _this.warningUnhooked();\n return _this.isFieldsValidating([name]);\n };\n this.resetWithFieldInitialValue = function () {\n var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Create cache\n var cache = new NameMap();\n var fieldEntities = _this.getFieldEntities(true);\n fieldEntities.forEach(function (field) {\n var initialValue = field.props.initialValue;\n var namePath = field.getNamePath();\n // Record only if has `initialValue`\n if (initialValue !== undefined) {\n var records = cache.get(namePath) || new Set();\n records.add({\n entity: field,\n value: initialValue\n });\n cache.set(namePath, records);\n }\n });\n // Reset\n var resetWithFields = function resetWithFields(entities) {\n entities.forEach(function (field) {\n var initialValue = field.props.initialValue;\n if (initialValue !== undefined) {\n var namePath = field.getNamePath();\n var formInitialValue = _this.getInitialValue(namePath);\n if (formInitialValue !== undefined) {\n // Warning if conflict with form initialValues and do not modify value\n warning(false, \"Form already set 'initialValues' with path '\".concat(namePath.join('.'), \"'. Field can not overwrite it.\"));\n } else {\n var records = cache.get(namePath);\n if (records && records.size > 1) {\n // Warning if multiple field set `initialValue`and do not modify value\n warning(false, \"Multiple Field with path '\".concat(namePath.join('.'), \"' set 'initialValue'. Can not decide which one to pick.\"));\n } else if (records) {\n var originValue = _this.getFieldValue(namePath);\n // Set `initialValue`\n if (!info.skipExist || originValue === undefined) {\n _this.updateStore(setValue(_this.store, namePath, _toConsumableArray(records)[0].value));\n }\n }\n }\n }\n });\n };\n var requiredFieldEntities;\n if (info.entities) {\n requiredFieldEntities = info.entities;\n } else if (info.namePathList) {\n requiredFieldEntities = [];\n info.namePathList.forEach(function (namePath) {\n var records = cache.get(namePath);\n if (records) {\n var _requiredFieldEntitie;\n (_requiredFieldEntitie = requiredFieldEntities).push.apply(_requiredFieldEntitie, _toConsumableArray(_toConsumableArray(records).map(function (r) {\n return r.entity;\n })));\n }\n });\n } else {\n requiredFieldEntities = fieldEntities;\n }\n resetWithFields(requiredFieldEntities);\n };\n this.resetFields = function (nameList) {\n _this.warningUnhooked();\n var prevStore = _this.store;\n if (!nameList) {\n _this.updateStore(setValues({}, _this.initialValues));\n _this.resetWithFieldInitialValue();\n _this.notifyObservers(prevStore, null, {\n type: 'reset'\n });\n _this.notifyWatch();\n return;\n }\n // Reset by `nameList`\n var namePathList = nameList.map(getNamePath);\n namePathList.forEach(function (namePath) {\n var initialValue = _this.getInitialValue(namePath);\n _this.updateStore(setValue(_this.store, namePath, initialValue));\n });\n _this.resetWithFieldInitialValue({\n namePathList: namePathList\n });\n _this.notifyObservers(prevStore, namePathList, {\n type: 'reset'\n });\n _this.notifyWatch(namePathList);\n };\n this.setFields = function (fields) {\n _this.warningUnhooked();\n var prevStore = _this.store;\n var namePathList = [];\n fields.forEach(function (fieldData) {\n var name = fieldData.name,\n errors = fieldData.errors,\n data = _objectWithoutProperties(fieldData, _excluded);\n var namePath = getNamePath(name);\n namePathList.push(namePath);\n // Value\n if ('value' in data) {\n _this.updateStore(setValue(_this.store, namePath, data.value));\n }\n _this.notifyObservers(prevStore, [namePath], {\n type: 'setField',\n data: fieldData\n });\n });\n _this.notifyWatch(namePathList);\n };\n this.getFields = function () {\n var entities = _this.getFieldEntities(true);\n var fields = entities.map(function (field) {\n var namePath = field.getNamePath();\n var meta = field.getMeta();\n var fieldData = _objectSpread(_objectSpread({}, meta), {}, {\n name: namePath,\n value: _this.getFieldValue(namePath)\n });\n Object.defineProperty(fieldData, 'originRCField', {\n value: true\n });\n return fieldData;\n });\n return fields;\n };\n this.initEntityValue = function (entity) {\n var initialValue = entity.props.initialValue;\n if (initialValue !== undefined) {\n var namePath = entity.getNamePath();\n var prevValue = getValue(_this.store, namePath);\n if (prevValue === undefined) {\n _this.updateStore(setValue(_this.store, namePath, initialValue));\n }\n }\n };\n this.isMergedPreserve = function (fieldPreserve) {\n var mergedPreserve = fieldPreserve !== undefined ? fieldPreserve : _this.preserve;\n return mergedPreserve !== null && mergedPreserve !== void 0 ? mergedPreserve : true;\n };\n this.registerField = function (entity) {\n _this.fieldEntities.push(entity);\n var namePath = entity.getNamePath();\n _this.notifyWatch([namePath]);\n // Set initial values\n if (entity.props.initialValue !== undefined) {\n var prevStore = _this.store;\n _this.resetWithFieldInitialValue({\n entities: [entity],\n skipExist: true\n });\n _this.notifyObservers(prevStore, [entity.getNamePath()], {\n type: 'valueUpdate',\n source: 'internal'\n });\n }\n // un-register field callback\n return function (isListField, preserve) {\n var subNamePath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n _this.fieldEntities = _this.fieldEntities.filter(function (item) {\n return item !== entity;\n });\n // Clean up store value if not preserve\n if (!_this.isMergedPreserve(preserve) && (!isListField || subNamePath.length > 1)) {\n var defaultValue = isListField ? undefined : _this.getInitialValue(namePath);\n if (namePath.length && _this.getFieldValue(namePath) !== defaultValue && _this.fieldEntities.every(function (field) {\n return (\n // Only reset when no namePath exist\n !matchNamePath(field.getNamePath(), namePath)\n );\n })) {\n var _prevStore = _this.store;\n _this.updateStore(setValue(_prevStore, namePath, defaultValue, true));\n // Notify that field is unmount\n _this.notifyObservers(_prevStore, [namePath], {\n type: 'remove'\n });\n // Dependencies update\n _this.triggerDependenciesUpdate(_prevStore, namePath);\n }\n }\n _this.notifyWatch([namePath]);\n };\n };\n this.dispatch = function (action) {\n switch (action.type) {\n case 'updateValue':\n {\n var namePath = action.namePath,\n value = action.value;\n _this.updateValue(namePath, value);\n break;\n }\n case 'validateField':\n {\n var _namePath = action.namePath,\n triggerName = action.triggerName;\n _this.validateFields([_namePath], {\n triggerName: triggerName\n });\n break;\n }\n default:\n // Currently we don't have other action. Do nothing.\n }\n };\n this.notifyObservers = function (prevStore, namePathList, info) {\n if (_this.subscribable) {\n var mergedInfo = _objectSpread(_objectSpread({}, info), {}, {\n store: _this.getFieldsValue(true)\n });\n _this.getFieldEntities().forEach(function (_ref3) {\n var onStoreChange = _ref3.onStoreChange;\n onStoreChange(prevStore, namePathList, mergedInfo);\n });\n } else {\n _this.forceRootUpdate();\n }\n };\n this.triggerDependenciesUpdate = function (prevStore, namePath) {\n var childrenFields = _this.getDependencyChildrenFields(namePath);\n if (childrenFields.length) {\n _this.validateFields(childrenFields);\n }\n _this.notifyObservers(prevStore, childrenFields, {\n type: 'dependenciesUpdate',\n relatedFields: [namePath].concat(_toConsumableArray(childrenFields))\n });\n return childrenFields;\n };\n this.updateValue = function (name, value) {\n var namePath = getNamePath(name);\n var prevStore = _this.store;\n _this.updateStore(setValue(_this.store, namePath, value));\n _this.notifyObservers(prevStore, [namePath], {\n type: 'valueUpdate',\n source: 'internal'\n });\n _this.notifyWatch([namePath]);\n // Dependencies update\n var childrenFields = _this.triggerDependenciesUpdate(prevStore, namePath);\n // trigger callback function\n var onValuesChange = _this.callbacks.onValuesChange;\n if (onValuesChange) {\n var changedValues = cloneByNamePathList(_this.store, [namePath]);\n onValuesChange(changedValues, _this.getFieldsValue());\n }\n _this.triggerOnFieldsChange([namePath].concat(_toConsumableArray(childrenFields)));\n };\n this.setFieldsValue = function (store) {\n _this.warningUnhooked();\n var prevStore = _this.store;\n if (store) {\n var nextStore = setValues(_this.store, store);\n _this.updateStore(nextStore);\n }\n _this.notifyObservers(prevStore, null, {\n type: 'valueUpdate',\n source: 'external'\n });\n _this.notifyWatch();\n };\n this.setFieldValue = function (name, value) {\n _this.setFields([{\n name: name,\n value: value\n }]);\n };\n this.getDependencyChildrenFields = function (rootNamePath) {\n var children = new Set();\n var childrenFields = [];\n var dependencies2fields = new NameMap();\n /**\n * Generate maps\n * Can use cache to save perf if user report performance issue with this\n */\n _this.getFieldEntities().forEach(function (field) {\n var dependencies = field.props.dependencies;\n (dependencies || []).forEach(function (dependency) {\n var dependencyNamePath = getNamePath(dependency);\n dependencies2fields.update(dependencyNamePath, function () {\n var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Set();\n fields.add(field);\n return fields;\n });\n });\n });\n var fillChildren = function fillChildren(namePath) {\n var fields = dependencies2fields.get(namePath) || new Set();\n fields.forEach(function (field) {\n if (!children.has(field)) {\n children.add(field);\n var fieldNamePath = field.getNamePath();\n if (field.isFieldDirty() && fieldNamePath.length) {\n childrenFields.push(fieldNamePath);\n fillChildren(fieldNamePath);\n }\n }\n });\n };\n fillChildren(rootNamePath);\n return childrenFields;\n };\n this.triggerOnFieldsChange = function (namePathList, filedErrors) {\n var onFieldsChange = _this.callbacks.onFieldsChange;\n if (onFieldsChange) {\n var fields = _this.getFields();\n /**\n * Fill errors since `fields` may be replaced by controlled fields\n */\n if (filedErrors) {\n var cache = new NameMap();\n filedErrors.forEach(function (_ref4) {\n var name = _ref4.name,\n errors = _ref4.errors;\n cache.set(name, errors);\n });\n fields.forEach(function (field) {\n // eslint-disable-next-line no-param-reassign\n field.errors = cache.get(field.name) || field.errors;\n });\n }\n var changedFields = fields.filter(function (_ref5) {\n var fieldName = _ref5.name;\n return containsNamePath(namePathList, fieldName);\n });\n onFieldsChange(changedFields, fields);\n }\n };\n this.validateFields = function (nameList, options) {\n _this.warningUnhooked();\n var provideNameList = !!nameList;\n var namePathList = provideNameList ? nameList.map(getNamePath) : [];\n // Collect result in promise list\n var promiseList = [];\n _this.getFieldEntities(true).forEach(function (field) {\n // Add field if not provide `nameList`\n if (!provideNameList) {\n namePathList.push(field.getNamePath());\n }\n /**\n * Recursive validate if configured.\n * TODO: perf improvement @zombieJ\n */\n if ((options === null || options === void 0 ? void 0 : options.recursive) && provideNameList) {\n var namePath = field.getNamePath();\n if (\n // nameList[i] === undefined 说明是以 nameList 开头的\n // ['name'] -> ['name','list']\n namePath.every(function (nameUnit, i) {\n return nameList[i] === nameUnit || nameList[i] === undefined;\n })) {\n namePathList.push(namePath);\n }\n }\n // Skip if without rule\n if (!field.props.rules || !field.props.rules.length) {\n return;\n }\n var fieldNamePath = field.getNamePath();\n // Add field validate rule in to promise list\n if (!provideNameList || containsNamePath(namePathList, fieldNamePath)) {\n var promise = field.validateRules(_objectSpread({\n validateMessages: _objectSpread(_objectSpread({}, defaultValidateMessages), _this.validateMessages)\n }, options));\n // Wrap promise with field\n promiseList.push(promise.then(function () {\n return {\n name: fieldNamePath,\n errors: [],\n warnings: []\n };\n }).catch(function (ruleErrors) {\n var _ruleErrors$forEach;\n var mergedErrors = [];\n var mergedWarnings = [];\n (_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 ? void 0 : _ruleErrors$forEach.call(ruleErrors, function (_ref6) {\n var warningOnly = _ref6.rule.warningOnly,\n errors = _ref6.errors;\n if (warningOnly) {\n mergedWarnings.push.apply(mergedWarnings, _toConsumableArray(errors));\n } else {\n mergedErrors.push.apply(mergedErrors, _toConsumableArray(errors));\n }\n });\n if (mergedErrors.length) {\n return Promise.reject({\n name: fieldNamePath,\n errors: mergedErrors,\n warnings: mergedWarnings\n });\n }\n return {\n name: fieldNamePath,\n errors: mergedErrors,\n warnings: mergedWarnings\n };\n }));\n }\n });\n var summaryPromise = allPromiseFinish(promiseList);\n _this.lastValidatePromise = summaryPromise;\n // Notify fields with rule that validate has finished and need update\n summaryPromise.catch(function (results) {\n return results;\n }).then(function (results) {\n var resultNamePathList = results.map(function (_ref7) {\n var name = _ref7.name;\n return name;\n });\n _this.notifyObservers(_this.store, resultNamePathList, {\n type: 'validateFinish'\n });\n _this.triggerOnFieldsChange(resultNamePathList, results);\n });\n var returnPromise = summaryPromise.then(function () {\n if (_this.lastValidatePromise === summaryPromise) {\n return Promise.resolve(_this.getFieldsValue(namePathList));\n }\n return Promise.reject([]);\n }).catch(function (results) {\n var errorList = results.filter(function (result) {\n return result && result.errors.length;\n });\n return Promise.reject({\n values: _this.getFieldsValue(namePathList),\n errorFields: errorList,\n outOfDate: _this.lastValidatePromise !== summaryPromise\n });\n });\n // Do not throw in console\n returnPromise.catch(function (e) {\n return e;\n });\n return returnPromise;\n };\n this.submit = function () {\n _this.warningUnhooked();\n _this.validateFields().then(function (values) {\n var onFinish = _this.callbacks.onFinish;\n if (onFinish) {\n try {\n onFinish(values);\n } catch (err) {\n // Should print error if user `onFinish` callback failed\n console.error(err);\n }\n }\n }).catch(function (e) {\n var onFinishFailed = _this.callbacks.onFinishFailed;\n if (onFinishFailed) {\n onFinishFailed(e);\n }\n });\n };\n this.forceRootUpdate = forceRootUpdate;\n});\nfunction useForm(form) {\n var formRef = React.useRef();\n var _React$useState = React.useState({}),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n forceUpdate = _React$useState2[1];\n if (!formRef.current) {\n if (form) {\n formRef.current = form;\n } else {\n // Create a new FormStore if not provided\n var forceReRender = function forceReRender() {\n forceUpdate({});\n };\n var formStore = new FormStore(forceReRender);\n formRef.current = formStore.getForm();\n }\n }\n return [formRef.current];\n}\nexport default useForm;","export function allPromiseFinish(promiseList) {\n var hasError = false;\n var count = promiseList.length;\n var results = [];\n if (!promiseList.length) {\n return Promise.resolve([]);\n }\n return new Promise(function (resolve, reject) {\n promiseList.forEach(function (promise, index) {\n promise.catch(function (e) {\n hasError = true;\n return e;\n }).then(function (result) {\n count -= 1;\n results[index] = result;\n if (count > 0) {\n return;\n }\n if (hasError) {\n reject(results);\n }\n resolve(results);\n });\n });\n });\n}","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nvar FormContext = /*#__PURE__*/React.createContext({\n triggerFormChange: function triggerFormChange() {},\n triggerFormFinish: function triggerFormFinish() {},\n registerForm: function registerForm() {},\n unregisterForm: function unregisterForm() {}\n});\nvar FormProvider = function FormProvider(_ref) {\n var validateMessages = _ref.validateMessages,\n onFormChange = _ref.onFormChange,\n onFormFinish = _ref.onFormFinish,\n children = _ref.children;\n var formContext = React.useContext(FormContext);\n var formsRef = React.useRef({});\n return /*#__PURE__*/React.createElement(FormContext.Provider, {\n value: _objectSpread(_objectSpread({}, formContext), {}, {\n validateMessages: _objectSpread(_objectSpread({}, formContext.validateMessages), validateMessages),\n // =========================================================\n // = Global Form Control =\n // =========================================================\n triggerFormChange: function triggerFormChange(name, changedFields) {\n if (onFormChange) {\n onFormChange(name, {\n changedFields: changedFields,\n forms: formsRef.current\n });\n }\n formContext.triggerFormChange(name, changedFields);\n },\n triggerFormFinish: function triggerFormFinish(name, values) {\n if (onFormFinish) {\n onFormFinish(name, {\n values: values,\n forms: formsRef.current\n });\n }\n formContext.triggerFormFinish(name, values);\n },\n registerForm: function registerForm(name, form) {\n if (name) {\n formsRef.current = _objectSpread(_objectSpread({}, formsRef.current), {}, _defineProperty({}, name, form));\n }\n formContext.registerForm(name, form);\n },\n unregisterForm: function unregisterForm(name) {\n var newForms = _objectSpread({}, formsRef.current);\n delete newForms[name];\n formsRef.current = newForms;\n formContext.unregisterForm(name);\n }\n })\n }, children);\n};\nexport { FormProvider };\nexport default FormContext;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"name\", \"initialValues\", \"fields\", \"form\", \"preserve\", \"children\", \"component\", \"validateMessages\", \"validateTrigger\", \"onValuesChange\", \"onFieldsChange\", \"onFinish\", \"onFinishFailed\"];\nimport * as React from 'react';\nimport useForm from './useForm';\nimport FieldContext, { HOOK_MARK } from './FieldContext';\nimport FormContext from './FormContext';\nimport { isSimilar } from './utils/valueUtil';\nvar Form = function Form(_ref, ref) {\n var name = _ref.name,\n initialValues = _ref.initialValues,\n fields = _ref.fields,\n form = _ref.form,\n preserve = _ref.preserve,\n children = _ref.children,\n _ref$component = _ref.component,\n Component = _ref$component === void 0 ? 'form' : _ref$component,\n validateMessages = _ref.validateMessages,\n _ref$validateTrigger = _ref.validateTrigger,\n validateTrigger = _ref$validateTrigger === void 0 ? 'onChange' : _ref$validateTrigger,\n onValuesChange = _ref.onValuesChange,\n _onFieldsChange = _ref.onFieldsChange,\n _onFinish = _ref.onFinish,\n onFinishFailed = _ref.onFinishFailed,\n restProps = _objectWithoutProperties(_ref, _excluded);\n var formContext = React.useContext(FormContext);\n // We customize handle event since Context will makes all the consumer re-render:\n // https://reactjs.org/docs/context.html#contextprovider\n var _useForm = useForm(form),\n _useForm2 = _slicedToArray(_useForm, 1),\n formInstance = _useForm2[0];\n var _formInstance$getInte = formInstance.getInternalHooks(HOOK_MARK),\n useSubscribe = _formInstance$getInte.useSubscribe,\n setInitialValues = _formInstance$getInte.setInitialValues,\n setCallbacks = _formInstance$getInte.setCallbacks,\n setValidateMessages = _formInstance$getInte.setValidateMessages,\n setPreserve = _formInstance$getInte.setPreserve,\n destroyForm = _formInstance$getInte.destroyForm;\n // Pass ref with form instance\n React.useImperativeHandle(ref, function () {\n return formInstance;\n });\n // Register form into Context\n React.useEffect(function () {\n formContext.registerForm(name, formInstance);\n return function () {\n formContext.unregisterForm(name);\n };\n }, [formContext, formInstance, name]);\n // Pass props to store\n setValidateMessages(_objectSpread(_objectSpread({}, formContext.validateMessages), validateMessages));\n setCallbacks({\n onValuesChange: onValuesChange,\n onFieldsChange: function onFieldsChange(changedFields) {\n formContext.triggerFormChange(name, changedFields);\n if (_onFieldsChange) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n _onFieldsChange.apply(void 0, [changedFields].concat(rest));\n }\n },\n onFinish: function onFinish(values) {\n formContext.triggerFormFinish(name, values);\n if (_onFinish) {\n _onFinish(values);\n }\n },\n onFinishFailed: onFinishFailed\n });\n setPreserve(preserve);\n // Set initial value, init store value when first mount\n var mountRef = React.useRef(null);\n setInitialValues(initialValues, !mountRef.current);\n if (!mountRef.current) {\n mountRef.current = true;\n }\n React.useEffect(function () {\n return destroyForm;\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n // Prepare children by `children` type\n var childrenNode;\n var childrenRenderProps = typeof children === 'function';\n if (childrenRenderProps) {\n var values = formInstance.getFieldsValue(true);\n childrenNode = children(values, formInstance);\n } else {\n childrenNode = children;\n }\n // Not use subscribe when using render props\n useSubscribe(!childrenRenderProps);\n // Listen if fields provided. We use ref to save prev data here to avoid additional render\n var prevFieldsRef = React.useRef();\n React.useEffect(function () {\n if (!isSimilar(prevFieldsRef.current || [], fields || [])) {\n formInstance.setFields(fields || []);\n }\n prevFieldsRef.current = fields;\n }, [fields, formInstance]);\n var formContextValue = React.useMemo(function () {\n return _objectSpread(_objectSpread({}, formInstance), {}, {\n validateTrigger: validateTrigger\n });\n }, [formInstance, validateTrigger]);\n var wrapperNode = /*#__PURE__*/React.createElement(FieldContext.Provider, {\n value: formContextValue\n }, childrenNode);\n if (Component === false) {\n return wrapperNode;\n }\n return /*#__PURE__*/React.createElement(Component, _extends({}, restProps, {\n onSubmit: function onSubmit(event) {\n event.preventDefault();\n event.stopPropagation();\n formInstance.submit();\n },\n onReset: function onReset(event) {\n var _restProps$onReset;\n event.preventDefault();\n formInstance.resetFields();\n (_restProps$onReset = restProps.onReset) === null || _restProps$onReset === void 0 ? void 0 : _restProps$onReset.call(restProps, event);\n }\n }), wrapperNode);\n};\nexport default Form;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { FieldContext } from '.';\nimport warning from \"rc-util/es/warning\";\nimport { HOOK_MARK } from './FieldContext';\nimport { useState, useContext, useEffect, useRef, useMemo } from 'react';\nimport { getNamePath, getValue } from './utils/valueUtil';\nexport function stringify(value) {\n try {\n return JSON.stringify(value);\n } catch (err) {\n return Math.random();\n }\n}\nvar useWatchWarning = process.env.NODE_ENV !== 'production' ? function (namePath) {\n var fullyStr = namePath.join('__RC_FIELD_FORM_SPLIT__');\n var nameStrRef = useRef(fullyStr);\n warning(nameStrRef.current === fullyStr, '`useWatch` is not support dynamic `namePath`. Please provide static instead.');\n} : function () {};\nfunction useWatch() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var _args$ = args[0],\n dependencies = _args$ === void 0 ? [] : _args$,\n form = args[1];\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n value = _useState2[0],\n setValue = _useState2[1];\n var valueStr = useMemo(function () {\n return stringify(value);\n }, [value]);\n var valueStrRef = useRef(valueStr);\n valueStrRef.current = valueStr;\n var fieldContext = useContext(FieldContext);\n var formInstance = form || fieldContext;\n var isValidForm = formInstance && formInstance._init;\n // Warning if not exist form instance\n if (process.env.NODE_ENV !== 'production') {\n warning(args.length === 2 ? form ? isValidForm : true : isValidForm, 'useWatch requires a form instance since it can not auto detect from context.');\n }\n var namePath = getNamePath(dependencies);\n var namePathRef = useRef(namePath);\n namePathRef.current = namePath;\n useWatchWarning(namePath);\n useEffect(function () {\n // Skip if not exist form instance\n if (!isValidForm) {\n return;\n }\n var getFieldsValue = formInstance.getFieldsValue,\n getInternalHooks = formInstance.getInternalHooks;\n var _getInternalHooks = getInternalHooks(HOOK_MARK),\n registerWatch = _getInternalHooks.registerWatch;\n var cancelRegister = registerWatch(function (store) {\n var newValue = getValue(store, namePathRef.current);\n var nextValueStr = stringify(newValue);\n // Compare stringify in case it's nest object\n if (valueStrRef.current !== nextValueStr) {\n valueStrRef.current = nextValueStr;\n setValue(newValue);\n }\n });\n // TODO: We can improve this perf in future\n var initialValue = getValue(getFieldsValue(), namePathRef.current);\n setValue(initialValue);\n return cancelRegister;\n },\n // We do not need re-register since namePath content is the same\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isValidForm]);\n return value;\n}\nexport default useWatch;","import * as React from 'react';\nimport Field from './Field';\nimport List from './List';\nimport useForm from './useForm';\nimport FieldForm from './Form';\nimport { FormProvider } from './FormContext';\nimport FieldContext from './FieldContext';\nimport ListContext from './ListContext';\nimport useWatch from './useWatch';\nvar InternalForm = /*#__PURE__*/React.forwardRef(FieldForm);\nvar RefForm = InternalForm;\nRefForm.FormProvider = FormProvider;\nRefForm.Field = Field;\nRefForm.List = List;\nRefForm.useForm = useForm;\nRefForm.useWatch = useWatch;\nexport { Field, List, useForm, FormProvider, FieldContext, ListContext, useWatch };\nexport default RefForm;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport React, { cloneElement, useRef } from 'react';\nimport classNames from 'classnames';\nimport { hasAddon, hasPrefixSuffix } from \"./utils/commonUtils\";\n\nvar BaseInput = function BaseInput(props) {\n var _inputElement$props;\n\n var inputElement = props.inputElement,\n prefixCls = props.prefixCls,\n prefix = props.prefix,\n suffix = props.suffix,\n addonBefore = props.addonBefore,\n addonAfter = props.addonAfter,\n className = props.className,\n style = props.style,\n affixWrapperClassName = props.affixWrapperClassName,\n groupClassName = props.groupClassName,\n wrapperClassName = props.wrapperClassName,\n disabled = props.disabled,\n readOnly = props.readOnly,\n focused = props.focused,\n triggerFocus = props.triggerFocus,\n allowClear = props.allowClear,\n value = props.value,\n handleReset = props.handleReset,\n hidden = props.hidden,\n inputStyle = props.inputStyle,\n classes = props.classes;\n var containerRef = useRef(null);\n\n var onInputClick = function onInputClick(e) {\n var _containerRef$current;\n\n if ((_containerRef$current = containerRef.current) !== null && _containerRef$current !== void 0 && _containerRef$current.contains(e.target)) {\n triggerFocus === null || triggerFocus === void 0 ? void 0 : triggerFocus();\n }\n }; // ================== Clear Icon ================== //\n\n\n var getClearIcon = function getClearIcon() {\n var _classNames;\n\n if (!allowClear) {\n return null;\n }\n\n var needClear = !disabled && !readOnly && value;\n var clearIconCls = \"\".concat(prefixCls, \"-clear-icon\");\n var iconNode = _typeof(allowClear) === 'object' && allowClear !== null && allowClear !== void 0 && allowClear.clearIcon ? allowClear.clearIcon : '✖';\n return /*#__PURE__*/React.createElement(\"span\", {\n onClick: handleReset // Do not trigger onBlur when clear input\n // https://github.com/ant-design/ant-design/issues/31200\n ,\n onMouseDown: function onMouseDown(e) {\n return e.preventDefault();\n },\n className: classNames(clearIconCls, (_classNames = {}, _defineProperty(_classNames, \"\".concat(clearIconCls, \"-hidden\"), !needClear), _defineProperty(_classNames, \"\".concat(clearIconCls, \"-has-suffix\"), !!suffix), _classNames)),\n role: \"button\",\n tabIndex: -1\n }, iconNode);\n };\n\n var element = /*#__PURE__*/cloneElement(inputElement, {\n value: value,\n hidden: hidden,\n style: _objectSpread(_objectSpread({}, (_inputElement$props = inputElement.props) === null || _inputElement$props === void 0 ? void 0 : _inputElement$props.style), inputStyle)\n }); // ================== Prefix & Suffix ================== //\n\n if (hasPrefixSuffix(props)) {\n var _classNames2;\n\n var affixWrapperPrefixCls = \"\".concat(prefixCls, \"-affix-wrapper\");\n var affixWrapperCls = classNames(affixWrapperPrefixCls, (_classNames2 = {}, _defineProperty(_classNames2, \"\".concat(affixWrapperPrefixCls, \"-disabled\"), disabled), _defineProperty(_classNames2, \"\".concat(affixWrapperPrefixCls, \"-focused\"), focused), _defineProperty(_classNames2, \"\".concat(affixWrapperPrefixCls, \"-readonly\"), readOnly), _defineProperty(_classNames2, \"\".concat(affixWrapperPrefixCls, \"-input-with-clear-btn\"), suffix && allowClear && value), _classNames2), !hasAddon(props) && className, affixWrapperClassName, classes === null || classes === void 0 ? void 0 : classes.affixWrapper);\n var suffixNode = (suffix || allowClear) && /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-suffix\")\n }, getClearIcon(), suffix);\n element = /*#__PURE__*/React.createElement(\"span\", {\n className: affixWrapperCls,\n style: style,\n hidden: !hasAddon(props) && hidden,\n onClick: onInputClick,\n ref: containerRef\n }, prefix && /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(prefixCls, \"-prefix\")\n }, prefix), /*#__PURE__*/cloneElement(inputElement, {\n style: inputStyle !== null && inputStyle !== void 0 ? inputStyle : null,\n value: value,\n hidden: null\n }), suffixNode);\n } // ================== Addon ================== //\n\n\n if (hasAddon(props)) {\n var wrapperCls = \"\".concat(prefixCls, \"-group\");\n var addonCls = \"\".concat(wrapperCls, \"-addon\");\n var mergedWrapperClassName = classNames(\"\".concat(prefixCls, \"-wrapper\"), wrapperCls, wrapperClassName, classes === null || classes === void 0 ? void 0 : classes.wrapper);\n var mergedGroupClassName = classNames(\"\".concat(prefixCls, \"-group-wrapper\"), className, groupClassName, classes === null || classes === void 0 ? void 0 : classes.group); // Need another wrapper for changing display:table to display:inline-block\n // and put style prop in wrapper\n\n return /*#__PURE__*/React.createElement(\"span\", {\n className: mergedGroupClassName,\n style: style,\n hidden: hidden\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: mergedWrapperClassName\n }, addonBefore && /*#__PURE__*/React.createElement(\"span\", {\n className: addonCls\n }, addonBefore), /*#__PURE__*/cloneElement(element, {\n style: inputStyle !== null && inputStyle !== void 0 ? inputStyle : null,\n hidden: null\n }), addonAfter && /*#__PURE__*/React.createElement(\"span\", {\n className: addonCls\n }, addonAfter)));\n }\n\n return element;\n};\n\nexport default BaseInput;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"autoComplete\", \"onChange\", \"onFocus\", \"onBlur\", \"onPressEnter\", \"onKeyDown\", \"prefixCls\", \"disabled\", \"htmlSize\", \"className\", \"maxLength\", \"suffix\", \"showCount\", \"type\", \"inputClassName\", \"classes\"];\nimport React, { useRef, useState, forwardRef, useImperativeHandle, useEffect } from 'react';\nimport BaseInput from \"./BaseInput\";\nimport omit from \"rc-util/es/omit\";\nimport { fixControlledValue, hasAddon, hasPrefixSuffix, resolveOnChange, triggerFocus } from \"./utils/commonUtils\";\nimport classNames from 'classnames';\nimport useMergedState from \"rc-util/es/hooks/useMergedState\";\nvar Input = /*#__PURE__*/forwardRef(function (props, ref) {\n var autoComplete = props.autoComplete,\n onChange = props.onChange,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onPressEnter = props.onPressEnter,\n onKeyDown = props.onKeyDown,\n _props$prefixCls = props.prefixCls,\n prefixCls = _props$prefixCls === void 0 ? 'rc-input' : _props$prefixCls,\n disabled = props.disabled,\n htmlSize = props.htmlSize,\n className = props.className,\n maxLength = props.maxLength,\n suffix = props.suffix,\n showCount = props.showCount,\n _props$type = props.type,\n type = _props$type === void 0 ? 'text' : _props$type,\n inputClassName = props.inputClassName,\n classes = props.classes,\n rest = _objectWithoutProperties(props, _excluded);\n\n var _useMergedState = useMergedState(props.defaultValue, {\n value: props.value\n }),\n _useMergedState2 = _slicedToArray(_useMergedState, 2),\n value = _useMergedState2[0],\n setValue = _useMergedState2[1];\n\n var _useState = useState(false),\n _useState2 = _slicedToArray(_useState, 2),\n focused = _useState2[0],\n setFocused = _useState2[1];\n\n var inputRef = useRef(null);\n\n var focus = function focus(option) {\n if (inputRef.current) {\n triggerFocus(inputRef.current, option);\n }\n };\n\n useImperativeHandle(ref, function () {\n return {\n focus: focus,\n blur: function blur() {\n var _inputRef$current;\n\n (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.blur();\n },\n setSelectionRange: function setSelectionRange(start, end, direction) {\n var _inputRef$current2;\n\n (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.setSelectionRange(start, end, direction);\n },\n select: function select() {\n var _inputRef$current3;\n\n (_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.select();\n },\n input: inputRef.current\n };\n });\n useEffect(function () {\n setFocused(function (prev) {\n return prev && disabled ? false : prev;\n });\n }, [disabled]);\n\n var handleChange = function handleChange(e) {\n if (props.value === undefined) {\n setValue(e.target.value);\n }\n\n if (inputRef.current) {\n resolveOnChange(inputRef.current, e, onChange);\n }\n };\n\n var handleKeyDown = function handleKeyDown(e) {\n if (onPressEnter && e.key === 'Enter') {\n onPressEnter(e);\n }\n\n onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);\n };\n\n var handleFocus = function handleFocus(e) {\n setFocused(true);\n onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);\n };\n\n var handleBlur = function handleBlur(e) {\n setFocused(false);\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n };\n\n var handleReset = function handleReset(e) {\n setValue('');\n focus();\n\n if (inputRef.current) {\n resolveOnChange(inputRef.current, e, onChange);\n }\n };\n\n var getInputElement = function getInputElement() {\n // Fix https://fb.me/react-unknown-prop\n var otherProps = omit(props, ['prefixCls', 'onPressEnter', 'addonBefore', 'addonAfter', 'prefix', 'suffix', 'allowClear', // Input elements must be either controlled or uncontrolled,\n // specify either the value prop, or the defaultValue prop, but not both.\n 'defaultValue', 'showCount', 'affixWrapperClassName', 'groupClassName', 'inputClassName', 'classes', 'wrapperClassName', 'htmlSize']);\n return /*#__PURE__*/React.createElement(\"input\", _extends({\n autoComplete: autoComplete\n }, otherProps, {\n onChange: handleChange,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n className: classNames(prefixCls, _defineProperty({}, \"\".concat(prefixCls, \"-disabled\"), disabled), inputClassName, classes === null || classes === void 0 ? void 0 : classes.input, !hasAddon(props) && !hasPrefixSuffix(props) && className),\n ref: inputRef,\n size: htmlSize,\n type: type\n }));\n };\n\n var getSuffix = function getSuffix() {\n // Max length value\n var hasMaxLength = Number(maxLength) > 0;\n\n if (suffix || showCount) {\n var val = fixControlledValue(value);\n\n var valueLength = _toConsumableArray(val).length;\n\n var dataCount = _typeof(showCount) === 'object' ? showCount.formatter({\n value: val,\n count: valueLength,\n maxLength: maxLength\n }) : \"\".concat(valueLength).concat(hasMaxLength ? \" / \".concat(maxLength) : '');\n return /*#__PURE__*/React.createElement(React.Fragment, null, !!showCount && /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(prefixCls, \"-show-count-suffix\"), _defineProperty({}, \"\".concat(prefixCls, \"-show-count-has-suffix\"), !!suffix))\n }, dataCount), suffix);\n }\n\n return null;\n };\n\n return /*#__PURE__*/React.createElement(BaseInput, _extends({}, rest, {\n prefixCls: prefixCls,\n className: className,\n inputElement: getInputElement(),\n handleReset: handleReset,\n value: fixControlledValue(value),\n focused: focused,\n triggerFocus: focus,\n suffix: getSuffix(),\n disabled: disabled,\n classes: classes\n }));\n});\nexport default Input;","import BaseInput from \"./BaseInput\";\nimport Input from \"./Input\";\nexport { BaseInput };\nexport default Input;","export function hasAddon(props) {\n return !!(props.addonBefore || props.addonAfter);\n}\nexport function hasPrefixSuffix(props) {\n return !!(props.prefix || props.suffix || props.allowClear);\n}\nexport function resolveOnChange(target, e, onChange, targetValue) {\n if (!onChange) {\n return;\n }\n\n var event = e;\n\n if (e.type === 'click') {\n // Clone a new target for event.\n // Avoid the following usage, the setQuery method gets the original value.\n //\n // const [query, setQuery] = React.useState('');\n // {\n // setQuery((prevStatus) => e.target.value);\n // }}\n // />\n var currentTarget = target.cloneNode(true); // click clear icon\n\n event = Object.create(e, {\n target: {\n value: currentTarget\n },\n currentTarget: {\n value: currentTarget\n }\n });\n currentTarget.value = '';\n onChange(event);\n return;\n } // Trigger by composition event, this means we need force change the input value\n\n\n if (targetValue !== undefined) {\n event = Object.create(e, {\n target: {\n value: target\n },\n currentTarget: {\n value: target\n }\n });\n target.value = targetValue;\n onChange(event);\n return;\n }\n\n onChange(event);\n}\nexport function triggerFocus(element, option) {\n if (!element) return;\n element.focus(option); // Selection content\n\n var _ref = option || {},\n cursor = _ref.cursor;\n\n if (cursor) {\n var len = element.value.length;\n\n switch (cursor) {\n case 'start':\n element.setSelectionRange(0, 0);\n break;\n\n case 'end':\n element.setSelectionRange(len, len);\n break;\n\n default:\n element.setSelectionRange(0, len);\n }\n }\n}\nexport function fixControlledValue(value) {\n if (typeof value === 'undefined' || value === null) {\n return '';\n }\n\n return String(value);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport canUseDOM from \"rc-util/es/Dom/canUseDom\";\n\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes[\"Webkit\".concat(styleProp)] = \"webkit\".concat(eventName);\n prefixes[\"Moz\".concat(styleProp)] = \"moz\".concat(eventName);\n prefixes[\"ms\".concat(styleProp)] = \"MS\".concat(eventName);\n prefixes[\"O\".concat(styleProp)] = \"o\".concat(eventName.toLowerCase());\n return prefixes;\n}\n\nexport function getVendorPrefixes(domSupport, win) {\n var prefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n };\n\n if (domSupport) {\n if (!('AnimationEvent' in win)) {\n delete prefixes.animationend.animation;\n }\n\n if (!('TransitionEvent' in win)) {\n delete prefixes.transitionend.transition;\n }\n }\n\n return prefixes;\n}\nvar vendorPrefixes = getVendorPrefixes(canUseDOM(), typeof window !== 'undefined' ? window : {});\nvar style = {};\n\nif (canUseDOM()) {\n var _document$createEleme = document.createElement('div');\n\n style = _document$createEleme.style;\n}\n\nvar prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n if (prefixMap) {\n var stylePropList = Object.keys(prefixMap);\n var len = stylePropList.length;\n\n for (var i = 0; i < len; i += 1) {\n var styleProp = stylePropList[i];\n\n if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n prefixedEventNames[eventName] = prefixMap[styleProp];\n return prefixedEventNames[eventName];\n }\n }\n }\n\n return '';\n}\nvar internalAnimationEndName = getVendorPrefixedEventName('animationend');\nvar internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport var animationEndName = internalAnimationEndName || 'animationend';\nexport var transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n if (!transitionName) return null;\n\n if (_typeof(transitionName) === 'object') {\n var type = transitionType.replace(/-\\w/g, function (match) {\n return match[1].toUpperCase();\n });\n return transitionName[type];\n }\n\n return \"\".concat(transitionName, \"-\").concat(transitionType);\n}","export var STATUS_NONE = 'none';\nexport var STATUS_APPEAR = 'appear';\nexport var STATUS_ENTER = 'enter';\nexport var STATUS_LEAVE = 'leave';\nexport var STEP_NONE = 'none';\nexport var STEP_PREPARE = 'prepare';\nexport var STEP_START = 'start';\nexport var STEP_ACTIVE = 'active';\nexport var STEP_ACTIVATED = 'end';","import { useEffect, useLayoutEffect } from 'react';\nimport canUseDom from \"rc-util/es/Dom/canUseDom\"; // It's safe to use `useLayoutEffect` but the warning is annoying\n\nvar useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useState from \"rc-util/es/hooks/useState\";\nimport { STEP_PREPARE, STEP_ACTIVE, STEP_START, STEP_ACTIVATED, STEP_NONE } from \"../interface\";\nimport useNextFrame from \"./useNextFrame\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nvar STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\n/** Skip current step */\n\nexport var SkipStep = false;\n/** Current step should be update in */\n\nexport var DoStep = true;\nexport function isActive(step) {\n return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default (function (status, callback) {\n var _useState = useState(STEP_NONE),\n _useState2 = _slicedToArray(_useState, 2),\n step = _useState2[0],\n setStep = _useState2[1];\n\n var _useNextFrame = useNextFrame(),\n _useNextFrame2 = _slicedToArray(_useNextFrame, 2),\n nextFrame = _useNextFrame2[0],\n cancelNextFrame = _useNextFrame2[1];\n\n function startQueue() {\n setStep(STEP_PREPARE, true);\n }\n\n useIsomorphicLayoutEffect(function () {\n if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n var index = STEP_QUEUE.indexOf(step);\n var nextStep = STEP_QUEUE[index + 1];\n var result = callback(step);\n\n if (result === SkipStep) {\n // Skip when no needed\n setStep(nextStep, true);\n } else {\n // Do as frame for step update\n nextFrame(function (info) {\n function doNext() {\n // Skip since current queue is ood\n if (info.isCanceled()) return;\n setStep(nextStep, true);\n }\n\n if (result === true) {\n doNext();\n } else {\n // Only promise should be async\n Promise.resolve(result).then(doNext);\n }\n });\n }\n }\n }, [status, step]);\n React.useEffect(function () {\n return function () {\n cancelNextFrame();\n };\n }, []);\n return [startQueue, step];\n});","import * as React from 'react';\nimport raf from \"rc-util/es/raf\";\nexport default (function () {\n var nextFrameRef = React.useRef(null);\n\n function cancelNextFrame() {\n raf.cancel(nextFrameRef.current);\n }\n\n function nextFrame(callback) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n cancelNextFrame();\n var nextFrameId = raf(function () {\n if (delay <= 1) {\n callback({\n isCanceled: function isCanceled() {\n return nextFrameId !== nextFrameRef.current;\n }\n });\n } else {\n nextFrame(callback, delay - 1);\n }\n });\n nextFrameRef.current = nextFrameId;\n }\n\n React.useEffect(function () {\n return function () {\n cancelNextFrame();\n };\n }, []);\n return [nextFrame, cancelNextFrame];\n});","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (function (callback) {\n var cacheElementRef = useRef(); // Cache callback\n\n var callbackRef = useRef(callback);\n callbackRef.current = callback; // Internal motion event handler\n\n var onInternalMotionEnd = React.useCallback(function (event) {\n callbackRef.current(event);\n }, []); // Remove events\n\n function removeMotionEvents(element) {\n if (element) {\n element.removeEventListener(transitionEndName, onInternalMotionEnd);\n element.removeEventListener(animationEndName, onInternalMotionEnd);\n }\n } // Patch events\n\n\n function patchMotionEvents(element) {\n if (cacheElementRef.current && cacheElementRef.current !== element) {\n removeMotionEvents(cacheElementRef.current);\n }\n\n if (element && element !== cacheElementRef.current) {\n element.addEventListener(transitionEndName, onInternalMotionEnd);\n element.addEventListener(animationEndName, onInternalMotionEnd); // Save as cache in case dom removed trigger by `motionDeadline`\n\n cacheElementRef.current = element;\n }\n } // Clean up when removed\n\n\n React.useEffect(function () {\n return function () {\n removeMotionEvents(cacheElementRef.current);\n };\n }, []);\n return [patchMotionEvents, removeMotionEvents];\n});","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\n\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(DomWrapper, _React$Component);\n\n var _super = _createSuper(DomWrapper);\n\n function DomWrapper() {\n _classCallCheck(this, DomWrapper);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(DomWrapper, [{\n key: \"render\",\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return DomWrapper;\n}(React.Component);\n\nexport default DomWrapper;","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { fillRef, supportRef } from \"rc-util/es/ref\";\nimport classNames from 'classnames';\nimport { getTransitionName, supportTransition } from \"./util/motion\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport useStatus from \"./hooks/useStatus\";\nimport DomWrapper from \"./DomWrapper\";\nimport { isActive } from \"./hooks/useStepQueue\";\n\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n var transitionSupport = config;\n\n if (_typeof(config) === 'object') {\n transitionSupport = config.transitionSupport;\n }\n\n function isSupportTransition(props) {\n return !!(props.motionName && transitionSupport);\n }\n\n var CSSMotion = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var _props$visible = props.visible,\n visible = _props$visible === void 0 ? true : _props$visible,\n _props$removeOnLeave = props.removeOnLeave,\n removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,\n forceRender = props.forceRender,\n children = props.children,\n motionName = props.motionName,\n leavedClassName = props.leavedClassName,\n eventProps = props.eventProps;\n var supportMotion = isSupportTransition(props); // Ref to the react node, it may be a HTMLElement\n\n var nodeRef = useRef(); // Ref to the dom wrapper in case ref can not pass to HTMLElement\n\n var wrapperNodeRef = useRef();\n\n function getDomElement() {\n try {\n // Here we're avoiding call for findDOMNode since it's deprecated\n // in strict mode. We're calling it only when node ref is not\n // an instance of DOM HTMLElement. Otherwise use\n // findDOMNode as a final resort\n return nodeRef.current instanceof HTMLElement ? nodeRef.current : findDOMNode(wrapperNodeRef.current);\n } catch (e) {\n // Only happen when `motionDeadline` trigger but element removed.\n return null;\n }\n }\n\n var _useStatus = useStatus(supportMotion, visible, getDomElement, props),\n _useStatus2 = _slicedToArray(_useStatus, 4),\n status = _useStatus2[0],\n statusStep = _useStatus2[1],\n statusStyle = _useStatus2[2],\n mergedVisible = _useStatus2[3]; // Record whether content has rendered\n // Will return null for un-rendered even when `removeOnLeave={false}`\n\n\n var renderedRef = React.useRef(mergedVisible);\n\n if (mergedVisible) {\n renderedRef.current = true;\n } // ====================== Refs ======================\n\n\n var setNodeRef = React.useCallback(function (node) {\n nodeRef.current = node;\n fillRef(ref, node);\n }, [ref]); // ===================== Render =====================\n\n var motionChildren;\n\n var mergedProps = _objectSpread(_objectSpread({}, eventProps), {}, {\n visible: visible\n });\n\n if (!children) {\n // No children\n motionChildren = null;\n } else if (status === STATUS_NONE || !isSupportTransition(props)) {\n // Stable children\n if (mergedVisible) {\n motionChildren = children(_objectSpread({}, mergedProps), setNodeRef);\n } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n className: leavedClassName\n }), setNodeRef);\n } else if (forceRender || !removeOnLeave && !leavedClassName) {\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n style: {\n display: 'none'\n }\n }), setNodeRef);\n } else {\n motionChildren = null;\n }\n } else {\n var _classNames;\n\n // In motion\n var statusSuffix;\n\n if (statusStep === STEP_PREPARE) {\n statusSuffix = 'prepare';\n } else if (isActive(statusStep)) {\n statusSuffix = 'active';\n } else if (statusStep === STEP_START) {\n statusSuffix = 'start';\n }\n\n motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n className: classNames(getTransitionName(motionName, status), (_classNames = {}, _defineProperty(_classNames, getTransitionName(motionName, \"\".concat(status, \"-\").concat(statusSuffix)), statusSuffix), _defineProperty(_classNames, motionName, typeof motionName === 'string'), _classNames)),\n style: statusStyle\n }), setNodeRef);\n } // Auto inject ref if child node not have `ref` props\n\n\n if ( /*#__PURE__*/React.isValidElement(motionChildren) && supportRef(motionChildren)) {\n var _ref = motionChildren,\n originNodeRef = _ref.ref;\n\n if (!originNodeRef) {\n motionChildren = /*#__PURE__*/React.cloneElement(motionChildren, {\n ref: setNodeRef\n });\n }\n }\n\n return /*#__PURE__*/React.createElement(DomWrapper, {\n ref: wrapperNodeRef\n }, motionChildren);\n });\n CSSMotion.displayName = 'CSSMotion';\n return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useEffect } from 'react';\nimport useState from \"rc-util/es/hooks/useState\";\nimport { STATUS_APPEAR, STATUS_NONE, STATUS_LEAVE, STATUS_ENTER, STEP_PREPARE, STEP_START, STEP_ACTIVE } from \"../interface\";\nimport useStepQueue, { DoStep, SkipStep, isActive } from \"./useStepQueue\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nexport default function useStatus(supportMotion, visible, getElement, _ref) {\n var _ref$motionEnter = _ref.motionEnter,\n motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,\n _ref$motionAppear = _ref.motionAppear,\n motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,\n _ref$motionLeave = _ref.motionLeave,\n motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,\n motionDeadline = _ref.motionDeadline,\n motionLeaveImmediately = _ref.motionLeaveImmediately,\n onAppearPrepare = _ref.onAppearPrepare,\n onEnterPrepare = _ref.onEnterPrepare,\n onLeavePrepare = _ref.onLeavePrepare,\n onAppearStart = _ref.onAppearStart,\n onEnterStart = _ref.onEnterStart,\n onLeaveStart = _ref.onLeaveStart,\n onAppearActive = _ref.onAppearActive,\n onEnterActive = _ref.onEnterActive,\n onLeaveActive = _ref.onLeaveActive,\n onAppearEnd = _ref.onAppearEnd,\n onEnterEnd = _ref.onEnterEnd,\n onLeaveEnd = _ref.onLeaveEnd,\n onVisibleChanged = _ref.onVisibleChanged;\n\n // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n asyncVisible = _useState2[0],\n setAsyncVisible = _useState2[1];\n\n var _useState3 = useState(STATUS_NONE),\n _useState4 = _slicedToArray(_useState3, 2),\n status = _useState4[0],\n setStatus = _useState4[1];\n\n var _useState5 = useState(null),\n _useState6 = _slicedToArray(_useState5, 2),\n style = _useState6[0],\n setStyle = _useState6[1];\n\n var mountedRef = useRef(false);\n var deadlineRef = useRef(null); // =========================== Dom Node ===========================\n\n function getDomElement() {\n return getElement();\n } // ========================== Motion End ==========================\n\n\n var activeRef = useRef(false);\n\n function onInternalMotionEnd(event) {\n var element = getDomElement();\n\n if (event && !event.deadline && event.target !== element) {\n // event exists\n // not initiated by deadline\n // transitionEnd not fired by inner elements\n return;\n }\n\n var currentActive = activeRef.current;\n var canEnd;\n\n if (status === STATUS_APPEAR && currentActive) {\n canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);\n } else if (status === STATUS_ENTER && currentActive) {\n canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);\n } else if (status === STATUS_LEAVE && currentActive) {\n canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);\n } // Only update status when `canEnd` and not destroyed\n\n\n if (status !== STATUS_NONE && currentActive && canEnd !== false) {\n setStatus(STATUS_NONE, true);\n setStyle(null, true);\n }\n }\n\n var _useDomMotionEvents = useDomMotionEvents(onInternalMotionEnd),\n _useDomMotionEvents2 = _slicedToArray(_useDomMotionEvents, 1),\n patchMotionEvents = _useDomMotionEvents2[0]; // ============================= Step =============================\n\n\n var eventHandlers = React.useMemo(function () {\n var _ref2, _ref3, _ref4;\n\n switch (status) {\n case STATUS_APPEAR:\n return _ref2 = {}, _defineProperty(_ref2, STEP_PREPARE, onAppearPrepare), _defineProperty(_ref2, STEP_START, onAppearStart), _defineProperty(_ref2, STEP_ACTIVE, onAppearActive), _ref2;\n\n case STATUS_ENTER:\n return _ref3 = {}, _defineProperty(_ref3, STEP_PREPARE, onEnterPrepare), _defineProperty(_ref3, STEP_START, onEnterStart), _defineProperty(_ref3, STEP_ACTIVE, onEnterActive), _ref3;\n\n case STATUS_LEAVE:\n return _ref4 = {}, _defineProperty(_ref4, STEP_PREPARE, onLeavePrepare), _defineProperty(_ref4, STEP_START, onLeaveStart), _defineProperty(_ref4, STEP_ACTIVE, onLeaveActive), _ref4;\n\n default:\n return {};\n }\n }, [status]);\n\n var _useStepQueue = useStepQueue(status, function (newStep) {\n // Only prepare step can be skip\n if (newStep === STEP_PREPARE) {\n var onPrepare = eventHandlers[STEP_PREPARE];\n\n if (!onPrepare) {\n return SkipStep;\n }\n\n return onPrepare(getDomElement());\n } // Rest step is sync update\n\n\n if (step in eventHandlers) {\n var _eventHandlers$step;\n\n setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);\n }\n\n if (step === STEP_ACTIVE) {\n // Patch events when motion needed\n patchMotionEvents(getDomElement());\n\n if (motionDeadline > 0) {\n clearTimeout(deadlineRef.current);\n deadlineRef.current = setTimeout(function () {\n onInternalMotionEnd({\n deadline: true\n });\n }, motionDeadline);\n }\n }\n\n return DoStep;\n }),\n _useStepQueue2 = _slicedToArray(_useStepQueue, 2),\n startStep = _useStepQueue2[0],\n step = _useStepQueue2[1];\n\n var active = isActive(step);\n activeRef.current = active; // ============================ Status ============================\n // Update with new status\n\n useIsomorphicLayoutEffect(function () {\n setAsyncVisible(visible);\n var isMounted = mountedRef.current;\n mountedRef.current = true;\n\n if (!supportMotion) {\n return;\n }\n\n var nextStatus; // Appear\n\n if (!isMounted && visible && motionAppear) {\n nextStatus = STATUS_APPEAR;\n } // Enter\n\n\n if (isMounted && visible && motionEnter) {\n nextStatus = STATUS_ENTER;\n } // Leave\n\n\n if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n nextStatus = STATUS_LEAVE;\n } // Update to next status\n\n\n if (nextStatus) {\n setStatus(nextStatus);\n startStep();\n }\n }, [visible]); // ============================ Effect ============================\n // Reset when motion changed\n\n useEffect(function () {\n if ( // Cancel appear\n status === STATUS_APPEAR && !motionAppear || // Cancel enter\n status === STATUS_ENTER && !motionEnter || // Cancel leave\n status === STATUS_LEAVE && !motionLeave) {\n setStatus(STATUS_NONE);\n }\n }, [motionAppear, motionEnter, motionLeave]);\n useEffect(function () {\n return function () {\n mountedRef.current = false;\n clearTimeout(deadlineRef.current);\n };\n }, []); // Trigger `onVisibleChanged`\n\n var firstMountChangeRef = React.useRef(false);\n useEffect(function () {\n // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n if (asyncVisible) {\n firstMountChangeRef.current = true;\n }\n\n if (asyncVisible !== undefined && status === STATUS_NONE) {\n // Skip first render is invisible since it's nothing changed\n if (firstMountChangeRef.current || asyncVisible) {\n onVisibleChanged === null || onVisibleChanged === void 0 ? void 0 : onVisibleChanged(asyncVisible);\n }\n\n firstMountChangeRef.current = true;\n }\n }, [asyncVisible, status]); // ============================ Styles ============================\n\n var mergedStyle = style;\n\n if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n mergedStyle = _objectSpread({\n transition: 'none'\n }, mergedStyle);\n }\n\n return [status, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n var keyObj;\n\n if (key && _typeof(key) === 'object' && 'key' in key) {\n keyObj = key;\n } else {\n keyObj = {\n key: key\n };\n }\n\n return _objectSpread(_objectSpread({}, keyObj), {}, {\n key: String(keyObj.key)\n });\n}\nexport function parseKeys() {\n var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var list = [];\n var currentIndex = 0;\n var currentLen = currentKeys.length;\n var prevKeyObjects = parseKeys(prevKeys);\n var currentKeyObjects = parseKeys(currentKeys); // Check prev keys to insert or keep\n\n prevKeyObjects.forEach(function (keyObj) {\n var hit = false;\n\n for (var i = currentIndex; i < currentLen; i += 1) {\n var currentKeyObj = currentKeyObjects[i];\n\n if (currentKeyObj.key === keyObj.key) {\n // New added keys should add before current key\n if (currentIndex < i) {\n list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n return _objectSpread(_objectSpread({}, obj), {}, {\n status: STATUS_ADD\n });\n }));\n currentIndex = i;\n }\n\n list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n status: STATUS_KEEP\n }));\n currentIndex += 1;\n hit = true;\n break;\n }\n } // If not hit, it means key is removed\n\n\n if (!hit) {\n list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n status: STATUS_REMOVE\n }));\n }\n }); // Add rest to the list\n\n if (currentIndex < currentLen) {\n list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n return _objectSpread(_objectSpread({}, obj), {}, {\n status: STATUS_ADD\n });\n }));\n }\n /**\n * Merge same key when it remove and add again:\n * [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n */\n\n\n var keys = {};\n list.forEach(function (_ref) {\n var key = _ref.key;\n keys[key] = (keys[key] || 0) + 1;\n });\n var duplicatedKeys = Object.keys(keys).filter(function (key) {\n return keys[key] > 1;\n });\n duplicatedKeys.forEach(function (matchKey) {\n // Remove `STATUS_REMOVE` node.\n list = list.filter(function (_ref2) {\n var key = _ref2.key,\n status = _ref2.status;\n return key !== matchKey || status !== STATUS_REMOVE;\n }); // Update `STATUS_ADD` to `STATUS_KEEP`\n\n list.forEach(function (node) {\n if (node.key === matchKey) {\n // eslint-disable-next-line no-param-reassign\n node.status = STATUS_KEEP;\n }\n });\n });\n return list;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"component\", \"children\", \"onVisibleChanged\", \"onAllRemoved\"],\n _excluded2 = [\"status\"];\n\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion from \"./CSSMotion\";\nimport { supportTransition } from \"./util/motion\";\nimport { STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED, diffKeys, parseKeys } from \"./util/diff\";\nvar MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport) {\n var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OriginCSSMotion;\n\n var CSSMotionList = /*#__PURE__*/function (_React$Component) {\n _inherits(CSSMotionList, _React$Component);\n\n var _super = _createSuper(CSSMotionList);\n\n function CSSMotionList() {\n var _this;\n\n _classCallCheck(this, CSSMotionList);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n keyEntities: []\n });\n\n _defineProperty(_assertThisInitialized(_this), \"removeKey\", function (removeKey) {\n var keyEntities = _this.state.keyEntities;\n var nextKeyEntities = keyEntities.map(function (entity) {\n if (entity.key !== removeKey) return entity;\n return _objectSpread(_objectSpread({}, entity), {}, {\n status: STATUS_REMOVED\n });\n });\n\n _this.setState({\n keyEntities: nextKeyEntities\n });\n\n return nextKeyEntities.filter(function (_ref) {\n var status = _ref.status;\n return status !== STATUS_REMOVED;\n }).length;\n });\n\n return _this;\n }\n\n _createClass(CSSMotionList, [{\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var keyEntities = this.state.keyEntities;\n\n var _this$props = this.props,\n component = _this$props.component,\n children = _this$props.children,\n _onVisibleChanged = _this$props.onVisibleChanged,\n onAllRemoved = _this$props.onAllRemoved,\n restProps = _objectWithoutProperties(_this$props, _excluded);\n\n var Component = component || React.Fragment;\n var motionProps = {};\n MOTION_PROP_NAMES.forEach(function (prop) {\n motionProps[prop] = restProps[prop];\n delete restProps[prop];\n });\n delete restProps.keys;\n return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(function (_ref2) {\n var status = _ref2.status,\n eventProps = _objectWithoutProperties(_ref2, _excluded2);\n\n var visible = status === STATUS_ADD || status === STATUS_KEEP;\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n key: eventProps.key,\n visible: visible,\n eventProps: eventProps,\n onVisibleChanged: function onVisibleChanged(changedVisible) {\n _onVisibleChanged === null || _onVisibleChanged === void 0 ? void 0 : _onVisibleChanged(changedVisible, {\n key: eventProps.key\n });\n\n if (!changedVisible) {\n var restKeysCount = _this2.removeKey(eventProps.key);\n\n if (restKeysCount === 0 && onAllRemoved) {\n onAllRemoved();\n }\n }\n }\n }), children);\n }));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(_ref3, _ref4) {\n var keys = _ref3.keys;\n var keyEntities = _ref4.keyEntities;\n var parsedKeyObjects = parseKeys(keys);\n var mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n return {\n keyEntities: mixedKeyEntities.filter(function (entity) {\n var prevEntity = keyEntities.find(function (_ref5) {\n var key = _ref5.key;\n return entity.key === key;\n }); // Remove if already mark as removed\n\n if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n return false;\n }\n\n return true;\n })\n };\n } // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n\n }]);\n\n return CSSMotionList;\n }(React.Component);\n\n _defineProperty(CSSMotionList, \"defaultProps\", {\n component: 'div'\n });\n\n return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import CSSMotion from \"./CSSMotion\";\nimport CSSMotionList from \"./CSSMotionList\";\nexport { CSSMotionList };\nexport default CSSMotion;","import ResizeObserver from 'resize-observer-polyfill';\n// =============================== Const ===============================\nvar elementListeners = new Map();\nfunction onResize(entities) {\n entities.forEach(function (entity) {\n var _elementListeners$get;\n var target = entity.target;\n (_elementListeners$get = elementListeners.get(target)) === null || _elementListeners$get === void 0 ? void 0 : _elementListeners$get.forEach(function (listener) {\n return listener(target);\n });\n });\n}\n// Note: ResizeObserver polyfill not support option to measure border-box resize\nvar resizeObserver = new ResizeObserver(onResize);\n// Dev env only\nexport var _el = process.env.NODE_ENV !== 'production' ? elementListeners : null; // eslint-disable-line\nexport var _rs = process.env.NODE_ENV !== 'production' ? onResize : null; // eslint-disable-line\n// ============================== Observe ==============================\nexport function observe(element, callback) {\n if (!elementListeners.has(element)) {\n elementListeners.set(element, new Set());\n resizeObserver.observe(element);\n }\n elementListeners.get(element).add(callback);\n}\nexport function unobserve(element, callback) {\n if (elementListeners.has(element)) {\n elementListeners.get(element).delete(callback);\n if (!elementListeners.get(element).size) {\n resizeObserver.unobserve(element);\n elementListeners.delete(element);\n }\n }\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\n/**\n * Fallback to findDOMNode if origin ref do not provide any dom element\n */\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n _inherits(DomWrapper, _React$Component);\n var _super = _createSuper(DomWrapper);\n function DomWrapper() {\n _classCallCheck(this, DomWrapper);\n return _super.apply(this, arguments);\n }\n _createClass(DomWrapper, [{\n key: \"render\",\n value: function render() {\n return this.props.children;\n }\n }]);\n return DomWrapper;\n}(React.Component);\nexport { DomWrapper as default };","import * as React from 'react';\nexport var CollectionContext = /*#__PURE__*/React.createContext(null);\n/**\n * Collect all the resize event from children ResizeObserver\n */\nexport function Collection(_ref) {\n var children = _ref.children,\n onBatchResize = _ref.onBatchResize;\n var resizeIdRef = React.useRef(0);\n var resizeInfosRef = React.useRef([]);\n var onCollectionResize = React.useContext(CollectionContext);\n var onResize = React.useCallback(function (size, element, data) {\n resizeIdRef.current += 1;\n var currentId = resizeIdRef.current;\n resizeInfosRef.current.push({\n size: size,\n element: element,\n data: data\n });\n Promise.resolve().then(function () {\n if (currentId === resizeIdRef.current) {\n onBatchResize === null || onBatchResize === void 0 ? void 0 : onBatchResize(resizeInfosRef.current);\n resizeInfosRef.current = [];\n }\n });\n // Continue bubbling if parent exist\n onCollectionResize === null || onCollectionResize === void 0 ? void 0 : onCollectionResize(size, element, data);\n }, [onBatchResize, onCollectionResize]);\n return /*#__PURE__*/React.createElement(CollectionContext.Provider, {\n value: onResize\n }, children);\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { observe, unobserve } from '../utils/observerUtil';\nimport DomWrapper from './DomWrapper';\nimport { CollectionContext } from '../Collection';\nfunction SingleObserver(props, ref) {\n var children = props.children,\n disabled = props.disabled;\n var elementRef = React.useRef(null);\n var wrapperRef = React.useRef(null);\n var onCollectionResize = React.useContext(CollectionContext);\n // =========================== Children ===========================\n var isRenderProps = typeof children === 'function';\n var mergedChildren = isRenderProps ? children(elementRef) : children;\n // ============================= Size =============================\n var sizeRef = React.useRef({\n width: -1,\n height: -1,\n offsetWidth: -1,\n offsetHeight: -1\n });\n // ============================= Ref ==============================\n var canRef = !isRenderProps && /*#__PURE__*/React.isValidElement(mergedChildren) && supportRef(mergedChildren);\n var originRef = canRef ? mergedChildren.ref : null;\n var mergedRef = React.useMemo(function () {\n return composeRef(originRef, elementRef);\n }, [originRef, elementRef]);\n var getDom = function getDom() {\n return findDOMNode(elementRef.current) || findDOMNode(wrapperRef.current);\n };\n React.useImperativeHandle(ref, function () {\n return getDom();\n });\n // =========================== Observe ============================\n var propsRef = React.useRef(props);\n propsRef.current = props;\n // Handler\n var onInternalResize = React.useCallback(function (target) {\n var _propsRef$current = propsRef.current,\n onResize = _propsRef$current.onResize,\n data = _propsRef$current.data;\n var _target$getBoundingCl = target.getBoundingClientRect(),\n width = _target$getBoundingCl.width,\n height = _target$getBoundingCl.height;\n var offsetWidth = target.offsetWidth,\n offsetHeight = target.offsetHeight;\n /**\n * Resize observer trigger when content size changed.\n * In most case we just care about element size,\n * let's use `boundary` instead of `contentRect` here to avoid shaking.\n */\n var fixedWidth = Math.floor(width);\n var fixedHeight = Math.floor(height);\n if (sizeRef.current.width !== fixedWidth || sizeRef.current.height !== fixedHeight || sizeRef.current.offsetWidth !== offsetWidth || sizeRef.current.offsetHeight !== offsetHeight) {\n var size = {\n width: fixedWidth,\n height: fixedHeight,\n offsetWidth: offsetWidth,\n offsetHeight: offsetHeight\n };\n sizeRef.current = size;\n // IE is strange, right?\n var mergedOffsetWidth = offsetWidth === Math.round(width) ? width : offsetWidth;\n var mergedOffsetHeight = offsetHeight === Math.round(height) ? height : offsetHeight;\n var sizeInfo = _objectSpread(_objectSpread({}, size), {}, {\n offsetWidth: mergedOffsetWidth,\n offsetHeight: mergedOffsetHeight\n });\n // Let collection know what happened\n onCollectionResize === null || onCollectionResize === void 0 ? void 0 : onCollectionResize(sizeInfo, target, data);\n if (onResize) {\n // defer the callback but not defer to next frame\n Promise.resolve().then(function () {\n onResize(sizeInfo, target);\n });\n }\n }\n }, []);\n // Dynamic observe\n React.useEffect(function () {\n var currentElement = getDom();\n if (currentElement && !disabled) {\n observe(currentElement, onInternalResize);\n }\n return function () {\n return unobserve(currentElement, onInternalResize);\n };\n }, [elementRef.current, disabled]);\n // ============================ Render ============================\n return /*#__PURE__*/React.createElement(DomWrapper, {\n ref: wrapperRef\n }, canRef ? /*#__PURE__*/React.cloneElement(mergedChildren, {\n ref: mergedRef\n }) : mergedChildren);\n}\nvar RefSingleObserver = /*#__PURE__*/React.forwardRef(SingleObserver);\nif (process.env.NODE_ENV !== 'production') {\n RefSingleObserver.displayName = 'SingleObserver';\n}\nexport default RefSingleObserver;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport toArray from \"rc-util/es/Children/toArray\";\nimport { warning } from \"rc-util/es/warning\";\nimport SingleObserver from './SingleObserver';\nimport { Collection } from './Collection';\nvar INTERNAL_PREFIX_KEY = 'rc-observer-key';\nimport { _rs } from './utils/observerUtil';\nexport { /** @private Test only for mock trigger resize event */\n_rs };\nfunction ResizeObserver(props, ref) {\n var children = props.children;\n var childNodes = typeof children === 'function' ? [children] : toArray(children);\n if (process.env.NODE_ENV !== 'production') {\n if (childNodes.length > 1) {\n warning(false, 'Find more than one child node with `children` in ResizeObserver. Please use ResizeObserver.Collection instead.');\n } else if (childNodes.length === 0) {\n warning(false, '`children` of ResizeObserver is empty. Nothing is in observe.');\n }\n }\n return childNodes.map(function (child, index) {\n var key = (child === null || child === void 0 ? void 0 : child.key) || \"\".concat(INTERNAL_PREFIX_KEY, \"-\").concat(index);\n return /*#__PURE__*/React.createElement(SingleObserver, _extends({}, props, {\n key: key,\n ref: index === 0 ? ref : undefined\n }), child);\n });\n}\nvar RefResizeObserver = /*#__PURE__*/React.forwardRef(ResizeObserver);\nif (process.env.NODE_ENV !== 'production') {\n RefResizeObserver.displayName = 'ResizeObserver';\n}\nRefResizeObserver.Collection = Collection;\nexport default RefResizeObserver;","import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDom from \"./Dom/canUseDom\";\nvar Portal = /*#__PURE__*/forwardRef(function (props, ref) {\n var didUpdate = props.didUpdate,\n getContainer = props.getContainer,\n children = props.children;\n var parentRef = useRef();\n var containerRef = useRef();\n\n // Ref return nothing, only for wrapper check exist\n useImperativeHandle(ref, function () {\n return {};\n });\n\n // Create container in client side with sync to avoid useEffect not get ref\n var initRef = useRef(false);\n if (!initRef.current && canUseDom()) {\n containerRef.current = getContainer();\n parentRef.current = containerRef.current.parentNode;\n initRef.current = true;\n }\n\n // [Legacy] Used by `rc-trigger`\n useEffect(function () {\n didUpdate === null || didUpdate === void 0 ? void 0 : didUpdate(props);\n });\n useEffect(function () {\n // Restore container to original place\n // React 18 StrictMode will unmount first and mount back for effect test:\n // https://reactjs.org/blog/2022/03/29/react-v18.html#new-strict-mode-behaviors\n if (containerRef.current.parentNode === null && parentRef.current !== null) {\n parentRef.current.appendChild(containerRef.current);\n }\n return function () {\n var _containerRef$current, _containerRef$current2;\n // [Legacy] This should not be handle by Portal but parent PortalWrapper instead.\n // Since some component use `Portal` directly, we have to keep the logic here.\n (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : (_containerRef$current2 = _containerRef$current.parentNode) === null || _containerRef$current2 === void 0 ? void 0 : _containerRef$current2.removeChild(containerRef.current);\n };\n }, []);\n return containerRef.current ? /*#__PURE__*/ReactDOM.createPortal(children, containerRef.current) : null;\n});\nexport default Portal;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n\nfunction isPointsEq(a1, a2, isAlignPoint) {\n if (isAlignPoint) {\n return a1[0] === a2[0];\n }\n\n return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nexport function getAlignFromPlacement(builtinPlacements, placementStr, align) {\n var baseAlign = builtinPlacements[placementStr] || {};\n return _objectSpread(_objectSpread({}, baseAlign), align);\n}\nexport function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {\n var points = align.points;\n var placements = Object.keys(builtinPlacements);\n\n for (var i = 0; i < placements.length; i += 1) {\n var placement = placements[i];\n\n if (isPointsEq(builtinPlacements[placement].points, points, isAlignPoint)) {\n return \"\".concat(prefixCls, \"-placement-\").concat(placement);\n }\n }\n\n return '';\n}","export function getMotion(_ref) {\n var prefixCls = _ref.prefixCls,\n motion = _ref.motion,\n animation = _ref.animation,\n transitionName = _ref.transitionName;\n\n if (motion) {\n return motion;\n }\n\n if (animation) {\n return {\n motionName: \"\".concat(prefixCls, \"-\").concat(animation)\n };\n }\n\n if (transitionName) {\n return {\n motionName: transitionName\n };\n }\n\n return null;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport { getMotion } from \"../utils/legacyUtil\";\nexport default function Mask(props) {\n var prefixCls = props.prefixCls,\n visible = props.visible,\n zIndex = props.zIndex,\n mask = props.mask,\n maskMotion = props.maskMotion,\n maskAnimation = props.maskAnimation,\n maskTransitionName = props.maskTransitionName;\n\n if (!mask) {\n return null;\n }\n\n var motion = {};\n\n if (maskMotion || maskTransitionName || maskAnimation) {\n motion = _objectSpread({\n motionAppear: true\n }, getMotion({\n motion: maskMotion,\n prefixCls: prefixCls,\n transitionName: maskTransitionName,\n animation: maskAnimation\n }));\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motion, {\n visible: visible,\n removeOnLeave: true\n }), function (_ref) {\n var className = _ref.className;\n return /*#__PURE__*/React.createElement(\"div\", {\n style: {\n zIndex: zIndex\n },\n className: classNames(\"\".concat(prefixCls, \"-mask\"), className)\n });\n });\n}","let vendorPrefix;\n\nconst jsCssMap = {\n Webkit: '-webkit-',\n Moz: '-moz-',\n // IE did it wrong again ...\n ms: '-ms-',\n O: '-o-',\n};\n\nfunction getVendorPrefix() {\n if (vendorPrefix !== undefined) {\n return vendorPrefix;\n }\n vendorPrefix = '';\n const style = document.createElement('p').style;\n const testProp = 'Transform';\n for (const key in jsCssMap) {\n if (key + testProp in style) {\n vendorPrefix = key;\n }\n }\n return vendorPrefix;\n}\n\nfunction getTransitionName() {\n return getVendorPrefix()\n ? `${getVendorPrefix()}TransitionProperty`\n : 'transitionProperty';\n}\n\nexport function getTransformName() {\n return getVendorPrefix() ? `${getVendorPrefix()}Transform` : 'transform';\n}\n\nexport function setTransitionProperty(node, value) {\n const name = getTransitionName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transitionProperty') {\n node.style.transitionProperty = value;\n }\n }\n}\n\nfunction setTransform(node, value) {\n const name = getTransformName();\n if (name) {\n node.style[name] = value;\n if (name !== 'transform') {\n node.style.transform = value;\n }\n }\n}\n\nexport function getTransitionProperty(node) {\n return node.style.transitionProperty || node.style[getTransitionName()];\n}\n\nexport function getTransformXY(node) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n const matrix = transform.replace(/[^0-9\\-.,]/g, '').split(',');\n return {\n x: parseFloat(matrix[12] || matrix[4], 0),\n y: parseFloat(matrix[13] || matrix[5], 0),\n };\n }\n return {\n x: 0,\n y: 0,\n };\n}\n\nconst matrix2d = /matrix\\((.*)\\)/;\nconst matrix3d = /matrix3d\\((.*)\\)/;\n\nexport function setTransformXY(node, xy) {\n const style = window.getComputedStyle(node, null);\n const transform =\n style.getPropertyValue('transform') ||\n style.getPropertyValue(getTransformName());\n if (transform && transform !== 'none') {\n let arr;\n let match2d = transform.match(matrix2d);\n if (match2d) {\n match2d = match2d[1];\n arr = match2d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[4] = xy.x;\n arr[5] = xy.y;\n setTransform(node, `matrix(${arr.join(',')})`);\n } else {\n const match3d = transform.match(matrix3d)[1];\n arr = match3d.split(',').map(item => {\n return parseFloat(item, 10);\n });\n arr[12] = xy.x;\n arr[13] = xy.y;\n setTransform(node, `matrix3d(${arr.join(',')})`);\n }\n } else {\n setTransform(\n node,\n `translateX(${xy.x}px) translateY(${xy.y}px) translateZ(0)`,\n );\n }\n}\n","import {\n setTransitionProperty,\n getTransitionProperty,\n getTransformXY,\n setTransformXY,\n getTransformName,\n} from './propertyUtils';\n\nconst RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nlet getComputedStyleX;\n\n// https://stackoverflow.com/a/3485654/3040605\nfunction forceRelayout(elem) {\n const originalStyle = elem.style.display;\n elem.style.display = 'none';\n elem.offsetHeight; // eslint-disable-line\n elem.style.display = originalStyle;\n}\n\nfunction css(el, name, v) {\n let value = v;\n if (typeof name === 'object') {\n for (const i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n return undefined;\n }\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value = `${value}px`;\n }\n el.style[name] = value;\n return undefined;\n }\n return getComputedStyleX(el, name);\n}\n\nfunction getClientPosition(elem) {\n let box;\n let x;\n let y;\n const doc = elem.ownerDocument;\n const body = doc.body;\n const docElem = doc && doc.documentElement;\n // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n box = elem.getBoundingClientRect();\n\n // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = Math.floor(box.left);\n y = Math.floor(box.top);\n\n // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n\n return {\n left: x,\n top: y,\n };\n}\n\nfunction getScroll(w, top) {\n let ret = w[`page${top ? 'Y' : 'X'}Offset`];\n const method = `scroll${top ? 'Top' : 'Left'}`;\n if (typeof ret !== 'number') {\n const d = w.document;\n // ie6,7,8 standard mode\n ret = d.documentElement[method];\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n const pos = getClientPosition(el);\n const doc = el.ownerDocument;\n const w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n // must use == for ie8\n /* eslint eqeqeq:0 */\n return obj !== null && obj !== undefined && obj == obj.window;\n}\n\nfunction getDocument(node) {\n if (isWindow(node)) {\n return node.document;\n }\n if (node.nodeType === 9) {\n return node;\n }\n return node.ownerDocument;\n}\n\nfunction _getComputedStyle(elem, name, cs) {\n let computedStyle = cs;\n let val = '';\n const d = getDocument(elem);\n computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n // https://github.com/kissyteam/kissy/issues/61\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nconst _RE_NUM_NO_PX = new RegExp(`^(${RE_NUM})(?!px)[a-z%]+$`, 'i');\nconst RE_POS = /^(top|right|bottom|left)$/;\nconst CURRENT_STYLE = 'currentStyle';\nconst RUNTIME_STYLE = 'runtimeStyle';\nconst LEFT = 'left';\nconst PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n let ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n const style = elem.style;\n const left = style[LEFT];\n const rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n // prevent flashing of content\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n // Put in the new values to get a computed value out\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX;\n\n // Revert the changed values\n style[LEFT] = left;\n\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n return ret === '' ? 'auto' : ret;\n}\n\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle\n ? _getComputedStyle\n : _getComputedStyleIE;\n}\n\nfunction getOffsetDirection(dir, option) {\n if (dir === 'left') {\n return option.useCssRight ? 'right' : dir;\n }\n return option.useCssBottom ? 'bottom' : dir;\n}\n\nfunction oppositeOffsetDirection(dir) {\n if (dir === 'left') {\n return 'right';\n } else if (dir === 'right') {\n return 'left';\n } else if (dir === 'top') {\n return 'bottom';\n } else if (dir === 'bottom') {\n return 'top';\n }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setLeftTop(elem, offset, option) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n let presetH = -999;\n let presetV = -999;\n const horizontalProperty = getOffsetDirection('left', option);\n const verticalProperty = getOffsetDirection('top', option);\n const oppositeHorizontalProperty = oppositeOffsetDirection(\n horizontalProperty,\n );\n const oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n\n if (horizontalProperty !== 'left') {\n presetH = 999;\n }\n\n if (verticalProperty !== 'top') {\n presetV = 999;\n }\n let originalTransition = '';\n const originalOffset = getOffset(elem);\n if ('left' in offset || 'top' in offset) {\n originalTransition = getTransitionProperty(elem) || '';\n setTransitionProperty(elem, 'none');\n }\n if ('left' in offset) {\n elem.style[oppositeHorizontalProperty] = '';\n elem.style[horizontalProperty] = `${presetH}px`;\n }\n if ('top' in offset) {\n elem.style[oppositeVerticalProperty] = '';\n elem.style[verticalProperty] = `${presetV}px`;\n }\n // force relayout\n forceRelayout(elem);\n const old = getOffset(elem);\n const originalStyle = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const preset = key === 'left' ? presetH : presetV;\n const off = originalOffset[key] - old[key];\n if (dir === key) {\n originalStyle[dir] = preset + off;\n } else {\n originalStyle[dir] = preset - off;\n }\n }\n }\n css(elem, originalStyle);\n // force relayout\n forceRelayout(elem);\n if ('left' in offset || 'top' in offset) {\n setTransitionProperty(elem, originalTransition);\n }\n const ret = {};\n for (const key in offset) {\n if (offset.hasOwnProperty(key)) {\n const dir = getOffsetDirection(key, option);\n const off = offset[key] - originalOffset[key];\n if (key === dir) {\n ret[dir] = originalStyle[dir] + off;\n } else {\n ret[dir] = originalStyle[dir] - off;\n }\n }\n }\n css(elem, ret);\n}\n\nfunction setTransform(elem, offset) {\n const originalOffset = getOffset(elem);\n const originalXY = getTransformXY(elem);\n const resultXY = { x: originalXY.x, y: originalXY.y };\n if ('left' in offset) {\n resultXY.x = originalXY.x + offset.left - originalOffset.left;\n }\n if ('top' in offset) {\n resultXY.y = originalXY.y + offset.top - originalOffset.top;\n }\n setTransformXY(elem, resultXY);\n}\n\nfunction setOffset(elem, offset, option) {\n if (option.ignoreShake) {\n const oriOffset = getOffset(elem);\n\n const oLeft = oriOffset.left.toFixed(0);\n const oTop = oriOffset.top.toFixed(0);\n const tLeft = offset.left.toFixed(0);\n const tTop = offset.top.toFixed(0);\n\n if (oLeft === tLeft && oTop === tTop) {\n return;\n }\n }\n\n if (option.useCssRight || option.useCssBottom) {\n setLeftTop(elem, offset, option);\n } else if (\n option.useCssTransform &&\n getTransformName() in document.body.style\n ) {\n setTransform(elem, offset, option);\n } else {\n setLeftTop(elem, offset, option);\n }\n}\n\nfunction each(arr, fn) {\n for (let i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nconst BOX_MODELS = ['margin', 'border', 'padding'];\nconst CONTENT_INDEX = -1;\nconst PADDING_INDEX = 2;\nconst BORDER_INDEX = 1;\nconst MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n const old = {};\n const style = elem.style;\n let name;\n\n // Remember the old values, and insert the new ones\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem);\n\n // Revert the old values\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n let value = 0;\n let prop;\n let j;\n let i;\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n if (prop) {\n for (i = 0; i < which.length; i++) {\n let cssProp;\n if (prop === 'border') {\n cssProp = `${prop}${which[i]}Width`;\n } else {\n cssProp = prop + which[i];\n }\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n return value;\n}\n\nconst domUtils = {\n getParent(element) {\n let parent = element;\n do {\n if (parent.nodeType === 11 && parent.host) {\n parent = parent.host;\n } else {\n parent = parent.parentNode;\n }\n } while (parent && parent.nodeType !== 1 && parent.nodeType !== 9);\n return parent;\n },\n};\n\neach(['Width', 'Height'], name => {\n domUtils[`doc${name}`] = refWin => {\n const d = refWin.document;\n return Math.max(\n // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement[`scroll${name}`],\n // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body[`scroll${name}`],\n domUtils[`viewport${name}`](d),\n );\n };\n\n domUtils[`viewport${name}`] = win => {\n // pc browser includes scrollbar in window.innerWidth\n const prop = `client${name}`;\n const doc = win.document;\n const body = doc.body;\n const documentElement = doc.documentElement;\n const documentElementProp = documentElement[prop];\n // 标准模式取 documentElement\n // backcompat 取 body\n return (\n (doc.compatMode === 'CSS1Compat' && documentElementProp) ||\n (body && body[prop]) ||\n documentElementProp\n );\n };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n let extra = ex;\n if (isWindow(elem)) {\n return name === 'width'\n ? domUtils.viewportWidth(elem)\n : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width'\n ? domUtils.docWidth(elem)\n : domUtils.docHeight(elem);\n }\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n let borderBoxValue =\n name === 'width'\n ? Math.floor(elem.getBoundingClientRect().width)\n : Math.floor(elem.getBoundingClientRect().height);\n const isBorderBox = isBorderBoxFn(elem);\n let cssBoxValue = 0;\n if (\n borderBoxValue === null ||\n borderBoxValue === undefined ||\n borderBoxValue <= 0\n ) {\n borderBoxValue = undefined;\n // Fall back to computed then un computed css if necessary\n cssBoxValue = getComputedStyleX(elem, name);\n if (\n cssBoxValue === null ||\n cssBoxValue === undefined ||\n Number(cssBoxValue) < 0\n ) {\n cssBoxValue = elem.style[name] || 0;\n }\n // Normalize '', auto, and prepare for extra\n cssBoxValue = Math.floor(parseFloat(cssBoxValue)) || 0;\n }\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n const borderBoxValueOrIsBorderBox =\n borderBoxValue !== undefined || isBorderBox;\n const val = borderBoxValue || cssBoxValue;\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which);\n }\n return cssBoxValue;\n } else if (borderBoxValueOrIsBorderBox) {\n if (extra === BORDER_INDEX) {\n return val;\n }\n return (\n val +\n (extra === PADDING_INDEX\n ? -getPBMWidth(elem, ['border'], which)\n : getPBMWidth(elem, ['margin'], which))\n );\n }\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which);\n}\n\nconst cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block',\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(...args) {\n let val;\n const elem = args[0];\n // in case elem is window\n // elem.offsetWidth === undefined\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, () => {\n val = getWH.apply(undefined, args);\n });\n }\n return val;\n}\n\neach(['width', 'height'], name => {\n const first = name.charAt(0).toUpperCase() + name.slice(1);\n domUtils[`outer${first}`] = (el, includeMargin) => {\n return (\n el &&\n getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX)\n );\n };\n const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = (elem, v) => {\n let val = v;\n if (val !== undefined) {\n if (elem) {\n const isBorderBox = isBorderBoxFn(elem);\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which);\n }\n return css(elem, name, val);\n }\n return undefined;\n }\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n});\n\nfunction mix(to, from) {\n for (const i in from) {\n if (from.hasOwnProperty(i)) {\n to[i] = from[i];\n }\n }\n return to;\n}\n\nconst utils = {\n getWindow(node) {\n if (node && node.document && node.setTimeout) {\n return node;\n }\n const doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n getDocument,\n offset(el, value, option) {\n if (typeof value !== 'undefined') {\n setOffset(el, value, option || {});\n } else {\n return getOffset(el);\n }\n },\n isWindow,\n each,\n css,\n clone(obj) {\n let i;\n const ret = {};\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n const overflow = obj.overflow;\n if (overflow) {\n for (i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret.overflow[i] = obj.overflow[i];\n }\n }\n }\n return ret;\n },\n mix,\n getWindowScrollLeft(w) {\n return getScrollLeft(w);\n },\n getWindowScrollTop(w) {\n return getScrollTop(w);\n },\n merge(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n utils.mix(ret, args[i]);\n }\n return ret;\n },\n viewportWidth: 0,\n viewportHeight: 0,\n};\n\nmix(utils, domUtils);\n\nexport default utils;\n","import utils from './utils';\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\nconst { getParent } = utils;\n\nfunction getOffsetParent(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return null;\n }\n // ie 这个也不是完全可行\n /*\n
\n
\n 元素 6 高 100px 宽 50px
\n
\n
\n */\n // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n // In other browsers it only includes elements with position absolute, relative or\n // fixed, not elements with overflow set to auto or scroll.\n // if (UA.ie && ieMode < 8) {\n // return element.offsetParent;\n // }\n // 统一的 offsetParent 方法\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent;\n let positionStyle = utils.css(element, 'position');\n const skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n\n if (!skipStatic) {\n return element.nodeName.toLowerCase() === 'html'\n ? null\n : getParent(element);\n }\n\n for (\n parent = getParent(element);\n parent && parent !== body && parent.nodeType !== 9;\n parent = getParent(parent)\n ) {\n positionStyle = utils.css(parent, 'position');\n if (positionStyle !== 'static') {\n return parent;\n }\n }\n return null;\n}\n\nexport default getOffsetParent;\n","import utils from './utils';\n\nconst { getParent } = utils;\n\nexport default function isAncestorFixed(element) {\n if (utils.isWindow(element) || element.nodeType === 9) {\n return false;\n }\n\n const doc = utils.getDocument(element);\n const body = doc.body;\n let parent = null;\n for (\n parent = getParent(element);\n // 修复元素位于 document.documentElement 下导致崩溃问题\n parent && parent !== body && parent !== doc;\n parent = getParent(parent)\n ) {\n const positionStyle = utils.css(parent, 'position');\n if (positionStyle === 'fixed') {\n return true;\n }\n }\n return false;\n}\n","import utils from './utils';\nimport getOffsetParent from './getOffsetParent';\nimport isAncestorFixed from './isAncestorFixed';\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element, alwaysByViewport) {\n const visibleRect = {\n left: 0,\n right: Infinity,\n top: 0,\n bottom: Infinity,\n };\n let el = getOffsetParent(element);\n const doc = utils.getDocument(element);\n const win = doc.defaultView || doc.parentWindow;\n const body = doc.body;\n const documentElement = doc.documentElement;\n\n // Determine the size of the visible rect by climbing the dom accounting for\n // all scrollable containers.\n while (el) {\n // clientWidth is zero for inline block elements in ie.\n if (\n (navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n // body may have overflow set on it, yet we still get the entire\n // viewport. In some browsers, el.offsetParent may be\n // document.documentElement, so check for that too.\n (el !== body &&\n el !== documentElement &&\n utils.css(el, 'overflow') !== 'visible')\n ) {\n const pos = utils.offset(el);\n // add border\n pos.left += el.clientLeft;\n pos.top += el.clientTop;\n visibleRect.top = Math.max(visibleRect.top, pos.top);\n visibleRect.right = Math.min(\n visibleRect.right,\n // consider area without scrollBar\n pos.left + el.clientWidth,\n );\n visibleRect.bottom = Math.min(\n visibleRect.bottom,\n pos.top + el.clientHeight,\n );\n visibleRect.left = Math.max(visibleRect.left, pos.left);\n } else if (el === body || el === documentElement) {\n break;\n }\n el = getOffsetParent(el);\n }\n\n // Set element position to fixed\n // make sure absolute element itself don't affect it's visible area\n // https://github.com/ant-design/ant-design/issues/7601\n let originalPosition = null;\n if (!utils.isWindow(element) && element.nodeType !== 9) {\n originalPosition = element.style.position;\n const position = utils.css(element, 'position');\n if (position === 'absolute') {\n element.style.position = 'fixed';\n }\n }\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n let documentWidth = documentElement.scrollWidth;\n let documentHeight = documentElement.scrollHeight;\n\n // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.\n // We should cut this ourself.\n const bodyStyle = window.getComputedStyle(body);\n if (bodyStyle.overflowX === 'hidden') {\n documentWidth = win.innerWidth;\n }\n if (bodyStyle.overflowY === 'hidden') {\n documentHeight = win.innerHeight;\n }\n\n // Reset element position after calculate the visible area\n if (element.style) {\n element.style.position = originalPosition;\n }\n\n if (alwaysByViewport || isAncestorFixed(element)) {\n // Clip by viewport's size.\n visibleRect.left = Math.max(visibleRect.left, scrollX);\n visibleRect.top = Math.max(visibleRect.top, scrollY);\n visibleRect.right = Math.min(visibleRect.right, scrollX + viewportWidth);\n visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + viewportHeight);\n } else {\n // Clip by document's size.\n const maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);\n visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);\n\n const maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);\n visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);\n }\n\n return visibleRect.top >= 0 &&\n visibleRect.left >= 0 &&\n visibleRect.bottom > visibleRect.top &&\n visibleRect.right > visibleRect.left\n ? visibleRect\n : null;\n}\n\nexport default getVisibleRectForElement;\n","import utils from './utils';\n\nfunction getRegion(node) {\n let offset;\n let w;\n let h;\n if (!utils.isWindow(node) && node.nodeType !== 9) {\n offset = utils.offset(node);\n w = utils.outerWidth(node);\n h = utils.outerHeight(node);\n } else {\n const win = utils.getWindow(node);\n offset = {\n left: utils.getWindowScrollLeft(win),\n top: utils.getWindowScrollTop(win),\n };\n w = utils.viewportWidth(win);\n h = utils.viewportHeight(win);\n }\n offset.width = w;\n offset.height = h;\n return offset;\n}\n\nexport default getRegion;\n","/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\nfunction getAlignOffset(region, align) {\n const V = align.charAt(0);\n const H = align.charAt(1);\n const w = region.width;\n const h = region.height;\n\n let x = region.left;\n let y = region.top;\n\n if (V === 'c') {\n y += h / 2;\n } else if (V === 'b') {\n y += h;\n }\n\n if (H === 'c') {\n x += w / 2;\n } else if (H === 'r') {\n x += w;\n }\n\n return {\n left: x,\n top: y,\n };\n}\n\nexport default getAlignOffset;\n","import getAlignOffset from './getAlignOffset';\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n const p1 = getAlignOffset(refNodeRegion, points[1]);\n const p2 = getAlignOffset(elRegion, points[0]);\n const diff = [p2.left - p1.left, p2.top - p1.top];\n\n return {\n left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),\n top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1]),\n };\n}\n\nexport default getElFuturePos;\n","/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\nimport utils from '../utils';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport adjustForViewport from '../adjustForViewport';\nimport getRegion from '../getRegion';\nimport getElFuturePos from '../getElFuturePos';\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left < visibleRect.left ||\n elFuturePos.left + elRegion.width > visibleRect.right\n );\n}\n\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top < visibleRect.top ||\n elFuturePos.top + elRegion.height > visibleRect.bottom\n );\n}\n\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.left > visibleRect.right ||\n elFuturePos.left + elRegion.width < visibleRect.left\n );\n}\n\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n return (\n elFuturePos.top > visibleRect.bottom ||\n elFuturePos.top + elRegion.height < visibleRect.top\n );\n}\n\nfunction flip(points, reg, map) {\n const ret = [];\n utils.each(points, p => {\n ret.push(\n p.replace(reg, m => {\n return map[m];\n }),\n );\n });\n return ret;\n}\n\nfunction flipOffset(offset, index) {\n offset[index] = -offset[index];\n return offset;\n}\n\nfunction convertOffset(str, offsetLen) {\n let n;\n if (/%$/.test(str)) {\n n = (parseInt(str.substring(0, str.length - 1), 10) / 100) * offsetLen;\n } else {\n n = parseInt(str, 10);\n }\n return n || 0;\n}\n\nfunction normalizeOffset(offset, el) {\n offset[0] = convertOffset(offset[0], el.width);\n offset[1] = convertOffset(offset[1], el.height);\n}\n\n/**\n * @param el\n * @param tgtRegion 参照节点所占的区域: { left, top, width, height }\n * @param align\n */\nfunction doAlign(el, tgtRegion, align, isTgtRegionVisible) {\n let points = align.points;\n let offset = align.offset || [0, 0];\n let targetOffset = align.targetOffset || [0, 0];\n let overflow = align.overflow;\n const source = align.source || el;\n offset = [].concat(offset);\n targetOffset = [].concat(targetOffset);\n overflow = overflow || {};\n const newOverflowCfg = {};\n let fail = 0;\n const alwaysByViewport = !!(overflow && overflow.alwaysByViewport);\n // 当前节点可以被放置的显示区域\n const visibleRect = getVisibleRectForElement(source, alwaysByViewport);\n // 当前节点所占的区域, left/top/width/height\n const elRegion = getRegion(source);\n // 将 offset 转换成数值,支持百分比\n normalizeOffset(offset, elRegion);\n normalizeOffset(targetOffset, tgtRegion);\n // 当前节点将要被放置的位置\n let elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n // 当前节点将要所处的区域\n let newElRegion = utils.merge(elRegion, elFuturePos);\n\n // 如果可视区域不能完全放置当前节点时允许调整\n if (\n visibleRect &&\n (overflow.adjustX || overflow.adjustY) &&\n isTgtRegionVisible\n ) {\n if (overflow.adjustX) {\n // 如果横向不能放下\n if (isFailX(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 0);\n const newTargetOffset = flipOffset(targetOffset, 0);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n if (overflow.adjustY) {\n // 如果纵向不能放下\n if (isFailY(elFuturePos, elRegion, visibleRect)) {\n // 对齐位置反下\n const newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n // 偏移量也反下\n const newOffset = flipOffset(offset, 1);\n const newTargetOffset = flipOffset(targetOffset, 1);\n const newElFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n newPoints,\n newOffset,\n newTargetOffset,\n );\n\n if (!isCompleteFailY(newElFuturePos, elRegion, visibleRect)) {\n fail = 1;\n points = newPoints;\n offset = newOffset;\n targetOffset = newTargetOffset;\n }\n }\n }\n\n // 如果失败,重新计算当前节点将要被放置的位置\n if (fail) {\n elFuturePos = getElFuturePos(\n elRegion,\n tgtRegion,\n points,\n offset,\n targetOffset,\n );\n utils.mix(newElRegion, elFuturePos);\n }\n const isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n const isStillFailY = isFailY(elFuturePos, elRegion, visibleRect);\n // 检查反下后的位置是否可以放下了,如果仍然放不下:\n // 1. 复原修改过的定位参数\n if (isStillFailX || isStillFailY) {\n let newPoints = points;\n\n // 重置对应部分的翻转逻辑\n if (isStillFailX) {\n newPoints = flip(points, /[lr]/gi, {\n l: 'r',\n r: 'l',\n });\n }\n if (isStillFailY) {\n newPoints = flip(points, /[tb]/gi, {\n t: 'b',\n b: 't',\n });\n }\n\n points = newPoints;\n\n offset = align.offset || [0, 0];\n targetOffset = align.targetOffset || [0, 0];\n }\n // 2. 只有指定了可以调整当前方向才调整\n newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;\n newOverflowCfg.adjustY = overflow.adjustY && isStillFailY;\n\n // 确实要调整,甚至可能会调整高度宽度\n if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n newElRegion = adjustForViewport(\n elFuturePos,\n elRegion,\n visibleRect,\n newOverflowCfg,\n );\n }\n }\n\n // need judge to in case set fixed with in css on height auto element\n if (newElRegion.width !== elRegion.width) {\n utils.css(\n source,\n 'width',\n utils.width(source) + newElRegion.width - elRegion.width,\n );\n }\n\n if (newElRegion.height !== elRegion.height) {\n utils.css(\n source,\n 'height',\n utils.height(source) + newElRegion.height - elRegion.height,\n );\n }\n\n // https://github.com/kissyteam/kissy/issues/190\n // 相对于屏幕位置没变,而 left/top 变了\n // 例如
\n utils.offset(\n source,\n {\n left: newElRegion.left,\n top: newElRegion.top,\n },\n {\n useCssRight: align.useCssRight,\n useCssBottom: align.useCssBottom,\n useCssTransform: align.useCssTransform,\n ignoreShake: align.ignoreShake,\n },\n );\n\n return {\n points,\n offset,\n targetOffset,\n overflow: newOverflowCfg,\n };\n}\n\nexport default doAlign;\n/**\n * 2012-04-26 yiminghe@gmail.com\n * - 优化智能对齐算法\n * - 慎用 resizeXX\n *\n * 2011-07-13 yiminghe@gmail.com note:\n * - 增加智能对齐,以及大小调整选项\n **/\n","import utils from './utils';\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n const pos = utils.clone(elFuturePos);\n const size = {\n width: elRegion.width,\n height: elRegion.height,\n };\n\n if (overflow.adjustX && pos.left < visibleRect.left) {\n pos.left = visibleRect.left;\n }\n\n // Left edge inside and right edge outside viewport, try to resize it.\n if (\n overflow.resizeWidth &&\n pos.left >= visibleRect.left &&\n pos.left + size.width > visibleRect.right\n ) {\n size.width -= pos.left + size.width - visibleRect.right;\n }\n\n // Right edge outside viewport, try to move it.\n if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n // 保证左边界和可视区域左边界对齐\n pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n }\n\n // Top edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top < visibleRect.top) {\n pos.top = visibleRect.top;\n }\n\n // Top edge inside and bottom edge outside viewport, try to resize it.\n if (\n overflow.resizeHeight &&\n pos.top >= visibleRect.top &&\n pos.top + size.height > visibleRect.bottom\n ) {\n size.height -= pos.top + size.height - visibleRect.bottom;\n }\n\n // Bottom edge outside viewport, try to move it.\n if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n // 保证上边界和可视区域上边界对齐\n pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n }\n\n return utils.mix(pos, size);\n}\n\nexport default adjustForViewport;\n","import doAlign from './align';\nimport getOffsetParent from '../getOffsetParent';\nimport getVisibleRectForElement from '../getVisibleRectForElement';\nimport getRegion from '../getRegion';\n\nfunction isOutOfVisibleRect(target, alwaysByViewport) {\n const visibleRect = getVisibleRectForElement(target, alwaysByViewport);\n const targetRegion = getRegion(target);\n\n return (\n !visibleRect ||\n targetRegion.left + targetRegion.width <= visibleRect.left ||\n targetRegion.top + targetRegion.height <= visibleRect.top ||\n targetRegion.left >= visibleRect.right ||\n targetRegion.top >= visibleRect.bottom\n );\n}\n\nfunction alignElement(el, refNode, align) {\n const target = align.target || refNode;\n const refNodeRegion = getRegion(target);\n\n const isTargetNotOutOfVisible = !isOutOfVisibleRect(\n target,\n align.overflow && align.overflow.alwaysByViewport,\n );\n\n return doAlign(el, refNodeRegion, align, isTargetNotOutOfVisible);\n}\n\nalignElement.__getOffsetParent = getOffsetParent;\n\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\n\nexport default alignElement;\n","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ResizeObserver from 'resize-observer-polyfill';\nimport contains from \"rc-util/es/Dom/contains\";\nexport function isSamePoint(prev, next) {\n if (prev === next) return true;\n if (!prev || !next) return false;\n\n if ('pageX' in next && 'pageY' in next) {\n return prev.pageX === next.pageX && prev.pageY === next.pageY;\n }\n\n if ('clientX' in next && 'clientY' in next) {\n return prev.clientX === next.clientX && prev.clientY === next.clientY;\n }\n\n return false;\n}\nexport function restoreFocus(activeElement, container) {\n // Focus back if is in the container\n if (activeElement !== document.activeElement && contains(container, activeElement) && typeof activeElement.focus === 'function') {\n activeElement.focus();\n }\n}\nexport function monitorResize(element, callback) {\n var prevWidth = null;\n var prevHeight = null;\n\n function onResize(_ref) {\n var _ref2 = _slicedToArray(_ref, 1),\n target = _ref2[0].target;\n\n if (!document.documentElement.contains(target)) return;\n\n var _target$getBoundingCl = target.getBoundingClientRect(),\n width = _target$getBoundingCl.width,\n height = _target$getBoundingCl.height;\n\n var fixedWidth = Math.floor(width);\n var fixedHeight = Math.floor(height);\n\n if (prevWidth !== fixedWidth || prevHeight !== fixedHeight) {\n // https://webkit.org/blog/9997/resizeobserver-in-webkit/\n Promise.resolve().then(function () {\n callback({\n width: fixedWidth,\n height: fixedHeight\n });\n });\n }\n\n prevWidth = fixedWidth;\n prevHeight = fixedHeight;\n }\n\n var resizeObserver = new ResizeObserver(onResize);\n\n if (element) {\n resizeObserver.observe(element);\n }\n\n return function () {\n resizeObserver.disconnect();\n };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/**\n * Removed props:\n * - childrenProps\n */\nimport { alignElement, alignPoint } from 'dom-align';\nimport isEqual from \"rc-util/es/isEqual\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport isVisible from \"rc-util/es/Dom/isVisible\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport { composeRef } from \"rc-util/es/ref\";\nimport React from 'react';\nimport useBuffer from \"./hooks/useBuffer\";\nimport { isSamePoint, monitorResize, restoreFocus } from \"./util\";\n\nfunction getElement(func) {\n if (typeof func !== 'function') return null;\n return func();\n}\n\nfunction getPoint(point) {\n if (_typeof(point) !== 'object' || !point) return null;\n return point;\n}\n\nvar Align = function Align(_ref, ref) {\n var children = _ref.children,\n disabled = _ref.disabled,\n target = _ref.target,\n align = _ref.align,\n onAlign = _ref.onAlign,\n monitorWindowResize = _ref.monitorWindowResize,\n _ref$monitorBufferTim = _ref.monitorBufferTime,\n monitorBufferTime = _ref$monitorBufferTim === void 0 ? 0 : _ref$monitorBufferTim;\n var cacheRef = React.useRef({});\n /** Popup node ref */\n\n var nodeRef = React.useRef();\n var childNode = React.Children.only(children); // ===================== Align ======================\n // We save the props here to avoid closure makes props ood\n\n var forceAlignPropsRef = React.useRef({});\n forceAlignPropsRef.current.disabled = disabled;\n forceAlignPropsRef.current.target = target;\n forceAlignPropsRef.current.align = align;\n forceAlignPropsRef.current.onAlign = onAlign;\n\n var _useBuffer = useBuffer(function () {\n var _forceAlignPropsRef$c = forceAlignPropsRef.current,\n latestDisabled = _forceAlignPropsRef$c.disabled,\n latestTarget = _forceAlignPropsRef$c.target,\n latestAlign = _forceAlignPropsRef$c.align,\n latestOnAlign = _forceAlignPropsRef$c.onAlign;\n var source = nodeRef.current;\n\n if (!latestDisabled && latestTarget && source) {\n var _result;\n\n var _element = getElement(latestTarget);\n\n var _point = getPoint(latestTarget);\n\n cacheRef.current.element = _element;\n cacheRef.current.point = _point;\n cacheRef.current.align = latestAlign; // IE lose focus after element realign\n // We should record activeElement and restore later\n\n var _document = document,\n activeElement = _document.activeElement; // We only align when element is visible\n\n if (_element && isVisible(_element)) {\n _result = alignElement(source, _element, latestAlign);\n } else if (_point) {\n _result = alignPoint(source, _point, latestAlign);\n }\n\n restoreFocus(activeElement, source);\n\n if (latestOnAlign && _result) {\n latestOnAlign(source, _result);\n }\n\n return true;\n }\n\n return false;\n }, monitorBufferTime),\n _useBuffer2 = _slicedToArray(_useBuffer, 2),\n _forceAlign = _useBuffer2[0],\n cancelForceAlign = _useBuffer2[1]; // ===================== Effect =====================\n // Handle props change\n\n\n var _React$useState = React.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n element = _React$useState2[0],\n setElement = _React$useState2[1];\n\n var _React$useState3 = React.useState(),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n point = _React$useState4[0],\n setPoint = _React$useState4[1];\n\n useLayoutEffect(function () {\n setElement(getElement(target));\n setPoint(getPoint(target));\n });\n React.useEffect(function () {\n if (cacheRef.current.element !== element || !isSamePoint(cacheRef.current.point, point) || !isEqual(cacheRef.current.align, align)) {\n _forceAlign();\n }\n }); // Watch popup element resize\n\n React.useEffect(function () {\n var cancelFn = monitorResize(nodeRef.current, _forceAlign);\n return cancelFn;\n }, [nodeRef.current]); // Watch target element resize\n\n React.useEffect(function () {\n var cancelFn = monitorResize(element, _forceAlign);\n return cancelFn;\n }, [element]); // Listen for disabled change\n\n React.useEffect(function () {\n if (!disabled) {\n _forceAlign();\n } else {\n cancelForceAlign();\n }\n }, [disabled]); // Listen for window resize\n\n React.useEffect(function () {\n if (monitorWindowResize) {\n var cancelFn = addEventListener(window, 'resize', _forceAlign);\n return cancelFn.remove;\n }\n }, [monitorWindowResize]); // Clear all if unmount\n\n React.useEffect(function () {\n return function () {\n cancelForceAlign();\n };\n }, []); // ====================== Ref =======================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: function forceAlign() {\n return _forceAlign(true);\n }\n };\n }); // ===================== Render =====================\n\n if ( /*#__PURE__*/React.isValidElement(childNode)) {\n childNode = /*#__PURE__*/React.cloneElement(childNode, {\n ref: composeRef(childNode.ref, nodeRef)\n });\n }\n\n return childNode;\n};\n\nvar RcAlign = /*#__PURE__*/React.forwardRef(Align);\nRcAlign.displayName = 'Align';\nexport default RcAlign;","import React from 'react';\nexport default (function (callback, buffer) {\n var calledRef = React.useRef(false);\n var timeoutRef = React.useRef(null);\n\n function cancelTrigger() {\n window.clearTimeout(timeoutRef.current);\n }\n\n function trigger(force) {\n cancelTrigger();\n\n if (!calledRef.current || force === true) {\n if (callback(force) === false) {\n // Not delay since callback cancelled self\n return;\n }\n\n calledRef.current = true;\n timeoutRef.current = window.setTimeout(function () {\n calledRef.current = false;\n }, buffer);\n } else {\n timeoutRef.current = window.setTimeout(function () {\n calledRef.current = false;\n trigger();\n }, buffer);\n }\n }\n\n return [trigger, function () {\n calledRef.current = false;\n cancelTrigger();\n }];\n});","import utils from '../utils';\nimport doAlign from './align';\n\n/**\n * `tgtPoint`: { pageX, pageY } or { clientX, clientY }.\n * If client position provided, will internal convert to page position.\n */\n\nfunction alignPoint(el, tgtPoint, align) {\n let pageX;\n let pageY;\n\n const doc = utils.getDocument(el);\n const win = doc.defaultView || doc.parentWindow;\n\n const scrollX = utils.getWindowScrollLeft(win);\n const scrollY = utils.getWindowScrollTop(win);\n const viewportWidth = utils.viewportWidth(win);\n const viewportHeight = utils.viewportHeight(win);\n\n if ('pageX' in tgtPoint) {\n pageX = tgtPoint.pageX;\n } else {\n pageX = scrollX + tgtPoint.clientX;\n }\n\n if ('pageY' in tgtPoint) {\n pageY = tgtPoint.pageY;\n } else {\n pageY = scrollY + tgtPoint.clientY;\n }\n\n const tgtRegion = {\n left: pageX,\n top: pageY,\n width: 0,\n height: 0,\n };\n\n const pointInView =\n pageX >= 0 &&\n pageX <= scrollX + viewportWidth &&\n (pageY >= 0 && pageY <= scrollY + viewportHeight);\n\n // Provide default target point\n const points = [align.points[0], 'cc'];\n\n return doAlign(el, tgtRegion, { ...align, points }, pointInView);\n}\n\nexport default alignPoint;\n","// export this package's api\nimport Align from \"./Align\";\nexport default Align;","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEffect, useRef } from 'react';\nimport raf from \"rc-util/es/raf\";\nimport useState from \"rc-util/es/hooks/useState\";\n/**\n * Popup should follow the steps for each component work correctly:\n * measure - check for the current stretch size\n * align - let component align the position\n * aligned - re-align again in case additional className changed the size\n * afterAlign - choice next step is trigger motion or finished\n * beforeMotion - should reset motion to invisible so that CSSMotion can do normal motion\n * motion - play the motion\n * stable - everything is done\n */\n\nvar StatusQueue = ['measure', 'alignPre', 'align', null, 'motion'];\nexport default (function (visible, doMeasure) {\n var _useState = useState(null),\n _useState2 = _slicedToArray(_useState, 2),\n status = _useState2[0],\n setInternalStatus = _useState2[1];\n\n var rafRef = useRef();\n\n function setStatus(nextStatus) {\n setInternalStatus(nextStatus, true);\n }\n\n function cancelRaf() {\n raf.cancel(rafRef.current);\n }\n\n function goNextStatus(callback) {\n cancelRaf();\n rafRef.current = raf(function () {\n // Only align should be manually trigger\n setStatus(function (prev) {\n switch (status) {\n case 'align':\n return 'motion';\n\n case 'motion':\n return 'stable';\n\n default:\n }\n\n return prev;\n });\n callback === null || callback === void 0 ? void 0 : callback();\n });\n } // Init status\n\n\n useEffect(function () {\n setStatus('measure');\n }, [visible]); // Go next status\n\n useEffect(function () {\n switch (status) {\n case 'measure':\n doMeasure();\n break;\n\n default:\n }\n\n if (status) {\n rafRef.current = raf( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n var index, nextStatus;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n index = StatusQueue.indexOf(status);\n nextStatus = StatusQueue[index + 1];\n\n if (nextStatus && index !== -1) {\n setStatus(nextStatus);\n }\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n })));\n }\n }, [status]);\n useEffect(function () {\n return function () {\n cancelRaf();\n };\n }, []);\n return [status, goNextStatus];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport Align from 'rc-align';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nimport useVisibleStatus from \"./useVisibleStatus\";\nimport { getMotion } from \"../utils/legacyUtil\";\nimport useStretchStyle from \"./useStretchStyle\";\nvar PopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var visible = props.visible,\n prefixCls = props.prefixCls,\n className = props.className,\n style = props.style,\n children = props.children,\n zIndex = props.zIndex,\n stretch = props.stretch,\n destroyPopupOnHide = props.destroyPopupOnHide,\n forceRender = props.forceRender,\n align = props.align,\n point = props.point,\n getRootDomNode = props.getRootDomNode,\n getClassNameFromAlign = props.getClassNameFromAlign,\n onAlign = props.onAlign,\n onMouseEnter = props.onMouseEnter,\n onMouseLeave = props.onMouseLeave,\n onMouseDown = props.onMouseDown,\n onTouchStart = props.onTouchStart,\n onClick = props.onClick;\n var alignRef = useRef();\n var elementRef = useRef();\n\n var _useState = useState(),\n _useState2 = _slicedToArray(_useState, 2),\n alignedClassName = _useState2[0],\n setAlignedClassName = _useState2[1]; // ======================= Measure ========================\n\n\n var _useStretchStyle = useStretchStyle(stretch),\n _useStretchStyle2 = _slicedToArray(_useStretchStyle, 2),\n stretchStyle = _useStretchStyle2[0],\n measureStretchStyle = _useStretchStyle2[1];\n\n function doMeasure() {\n if (stretch) {\n measureStretchStyle(getRootDomNode());\n }\n } // ======================== Status ========================\n\n\n var _useVisibleStatus = useVisibleStatus(visible, doMeasure),\n _useVisibleStatus2 = _slicedToArray(_useVisibleStatus, 2),\n status = _useVisibleStatus2[0],\n goNextStatus = _useVisibleStatus2[1]; // ======================== Aligns ========================\n\n /**\n * `alignedClassName` may modify `source` size,\n * which means one time align may not move to the correct position at once.\n *\n * We will reset `alignTimes` for each status switch to `alignPre`\n * and let `rc-align` to align for multiple times to ensure get final stable place.\n * Currently we mark `alignTimes < 2` repeat align, it will increase if user report for align issue.\n * \n * Update:\n * In React 18. `rc-align` effect of align may faster than ref called trigger `forceAlign`.\n * We adjust this to `alignTimes < 2`.\n * We need refactor `rc-align` to support mark of `forceAlign` call if this still happen.\n */\n\n\n var _useState3 = useState(0),\n _useState4 = _slicedToArray(_useState3, 2),\n alignTimes = _useState4[0],\n setAlignTimes = _useState4[1];\n\n var prepareResolveRef = useRef();\n useLayoutEffect(function () {\n if (status === 'alignPre') {\n setAlignTimes(0);\n }\n }, [status]); // `target` on `rc-align` can accept as a function to get the bind element or a point.\n // ref: https://www.npmjs.com/package/rc-align\n\n function getAlignTarget() {\n if (point) {\n return point;\n }\n\n return getRootDomNode;\n }\n\n function forceAlign() {\n var _alignRef$current;\n\n (_alignRef$current = alignRef.current) === null || _alignRef$current === void 0 ? void 0 : _alignRef$current.forceAlign();\n }\n\n function onInternalAlign(popupDomNode, matchAlign) {\n var nextAlignedClassName = getClassNameFromAlign(matchAlign);\n\n if (alignedClassName !== nextAlignedClassName) {\n setAlignedClassName(nextAlignedClassName);\n } // We will retry multi times to make sure that the element has been align in the right position.\n\n\n setAlignTimes(function (val) {\n return val + 1;\n });\n\n if (status === 'align') {\n onAlign === null || onAlign === void 0 ? void 0 : onAlign(popupDomNode, matchAlign);\n }\n } // Delay to go to next status\n\n\n useLayoutEffect(function () {\n if (status === 'align') {\n // Repeat until not more align needed\n if (alignTimes < 3) {\n forceAlign();\n } else {\n goNextStatus(function () {\n var _prepareResolveRef$cu;\n\n (_prepareResolveRef$cu = prepareResolveRef.current) === null || _prepareResolveRef$cu === void 0 ? void 0 : _prepareResolveRef$cu.call(prepareResolveRef);\n });\n }\n }\n }, [alignTimes]); // ======================== Motion ========================\n\n var motion = _objectSpread({}, getMotion(props));\n\n ['onAppearEnd', 'onEnterEnd', 'onLeaveEnd'].forEach(function (eventName) {\n var originHandler = motion[eventName];\n\n motion[eventName] = function (element, event) {\n goNextStatus();\n return originHandler === null || originHandler === void 0 ? void 0 : originHandler(element, event);\n };\n });\n\n function onShowPrepare() {\n return new Promise(function (resolve) {\n prepareResolveRef.current = resolve;\n });\n } // Go to stable directly when motion not provided\n\n\n React.useEffect(function () {\n if (!motion.motionName && status === 'motion') {\n goNextStatus();\n }\n }, [motion.motionName, status]); // ========================= Refs =========================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: forceAlign,\n getElement: function getElement() {\n return elementRef.current;\n }\n };\n }); // ======================== Render ========================\n\n var mergedStyle = _objectSpread(_objectSpread({}, stretchStyle), {}, {\n zIndex: zIndex,\n opacity: status === 'motion' || status === 'stable' || !visible ? undefined : 0,\n // Cannot interact with disappearing elements\n // https://github.com/ant-design/ant-design/issues/35051#issuecomment-1101340714\n pointerEvents: !visible && status !== 'stable' ? 'none' : undefined\n }, style); // Align status\n\n\n var alignDisabled = true;\n\n if (align !== null && align !== void 0 && align.points && (status === 'align' || status === 'stable')) {\n alignDisabled = false;\n }\n\n var childNode = children; // Wrapper when multiple children\n\n if (React.Children.count(children) > 1) {\n childNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: visible,\n ref: elementRef,\n leavedClassName: \"\".concat(prefixCls, \"-hidden\")\n }, motion, {\n onAppearPrepare: onShowPrepare,\n onEnterPrepare: onShowPrepare,\n removeOnLeave: destroyPopupOnHide,\n forceRender: forceRender\n }), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n var mergedClassName = classNames(prefixCls, className, alignedClassName, motionClassName);\n return /*#__PURE__*/React.createElement(Align, {\n target: getAlignTarget(),\n key: \"popup\",\n ref: alignRef,\n monitorWindowResize: true,\n disabled: alignDisabled,\n align: align,\n onAlign: onInternalAlign\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: mergedClassName,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onMouseDownCapture: onMouseDown,\n onTouchStartCapture: onTouchStart,\n onClick: onClick,\n style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n }, childNode));\n });\n});\nPopupInner.displayName = 'PopupInner';\nexport default PopupInner;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default (function (stretch) {\n var _React$useState = React.useState({\n width: 0,\n height: 0\n }),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n targetSize = _React$useState2[0],\n setTargetSize = _React$useState2[1];\n\n function measureStretch(element) {\n var tgtWidth = element.offsetWidth,\n tgtHeight = element.offsetHeight;\n\n var _element$getBoundingC = element.getBoundingClientRect(),\n width = _element$getBoundingC.width,\n height = _element$getBoundingC.height; // Rect is more accurate than offset, use if near\n\n\n if (Math.abs(tgtWidth - width) < 1 && Math.abs(tgtHeight - height) < 1) {\n tgtWidth = width;\n tgtHeight = height;\n }\n\n setTargetSize({\n width: tgtWidth,\n height: tgtHeight\n });\n } // Merge stretch style\n\n\n var style = React.useMemo(function () {\n var sizeStyle = {};\n\n if (stretch) {\n var width = targetSize.width,\n height = targetSize.height; // Stretch with target\n\n if (stretch.indexOf('height') !== -1 && height) {\n sizeStyle.height = height;\n } else if (stretch.indexOf('minHeight') !== -1 && height) {\n sizeStyle.minHeight = height;\n }\n\n if (stretch.indexOf('width') !== -1 && width) {\n sizeStyle.width = width;\n } else if (stretch.indexOf('minWidth') !== -1 && width) {\n sizeStyle.minWidth = width;\n }\n }\n\n return sizeStyle;\n }, [stretch, targetSize]);\n return [style, measureStretch];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nvar MobilePopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n visible = props.visible,\n zIndex = props.zIndex,\n children = props.children,\n _props$mobile = props.mobile;\n _props$mobile = _props$mobile === void 0 ? {} : _props$mobile;\n var popupClassName = _props$mobile.popupClassName,\n popupStyle = _props$mobile.popupStyle,\n _props$mobile$popupMo = _props$mobile.popupMotion,\n popupMotion = _props$mobile$popupMo === void 0 ? {} : _props$mobile$popupMo,\n popupRender = _props$mobile.popupRender,\n onClick = props.onClick;\n var elementRef = React.useRef(); // ========================= Refs =========================\n\n React.useImperativeHandle(ref, function () {\n return {\n forceAlign: function forceAlign() {},\n getElement: function getElement() {\n return elementRef.current;\n }\n };\n }); // ======================== Render ========================\n\n var mergedStyle = _objectSpread({\n zIndex: zIndex\n }, popupStyle);\n\n var childNode = children; // Wrapper when multiple children\n\n if (React.Children.count(children) > 1) {\n childNode = /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-content\")\n }, children);\n } // Mobile support additional render\n\n\n if (popupRender) {\n childNode = popupRender(childNode);\n }\n\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n visible: visible,\n ref: elementRef,\n removeOnLeave: true\n }, popupMotion), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n var mergedClassName = classNames(prefixCls, popupClassName, motionClassName);\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: mergedClassName,\n onClick: onClick,\n style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n }, childNode);\n });\n});\nMobilePopupInner.displayName = 'MobilePopupInner';\nexport default MobilePopupInner;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"visible\", \"mobile\"];\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport isMobile from \"rc-util/es/isMobile\";\nimport Mask from \"./Mask\";\nimport PopupInner from \"./PopupInner\";\nimport MobilePopupInner from \"./MobilePopupInner\";\nvar Popup = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n var visible = _ref.visible,\n mobile = _ref.mobile,\n props = _objectWithoutProperties(_ref, _excluded);\n\n var _useState = useState(visible),\n _useState2 = _slicedToArray(_useState, 2),\n innerVisible = _useState2[0],\n serInnerVisible = _useState2[1];\n\n var _useState3 = useState(false),\n _useState4 = _slicedToArray(_useState3, 2),\n inMobile = _useState4[0],\n setInMobile = _useState4[1];\n\n var cloneProps = _objectSpread(_objectSpread({}, props), {}, {\n visible: innerVisible\n }); // We check mobile in visible changed here.\n // And this also delay set `innerVisible` to avoid popup component render flash\n\n\n useEffect(function () {\n serInnerVisible(visible);\n\n if (visible && mobile) {\n setInMobile(isMobile());\n }\n }, [visible, mobile]);\n var popupNode = inMobile ? /*#__PURE__*/React.createElement(MobilePopupInner, _extends({}, cloneProps, {\n mobile: mobile,\n ref: ref\n })) : /*#__PURE__*/React.createElement(PopupInner, _extends({}, cloneProps, {\n ref: ref\n })); // We can use fragment directly but this may failed some selector usage. Keep as origin logic\n\n return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(Mask, cloneProps), popupNode);\n});\nPopup.displayName = 'Popup';\nexport default Popup;","import * as React from 'react';\nvar TriggerContext = /*#__PURE__*/React.createContext(null);\nexport default TriggerContext;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport raf from \"rc-util/es/raf\";\nimport contains from \"rc-util/es/Dom/contains\";\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport Portal from \"rc-util/es/Portal\";\nimport classNames from 'classnames';\nimport { getAlignFromPlacement, getAlignPopupClassName } from \"./utils/alignUtil\";\nimport Popup from \"./Popup\";\nimport TriggerContext from \"./context\";\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n return '';\n}\n\nfunction returnDocument(element) {\n if (element) {\n return element.ownerDocument;\n }\n\n return window.document;\n}\n\nvar ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur', 'onContextMenu'];\n\n/**\n * Internal usage. Do not use in your code since this will be removed.\n */\nexport function generateTrigger(PortalComponent) {\n var Trigger = /*#__PURE__*/function (_React$Component) {\n _inherits(Trigger, _React$Component);\n\n var _super = _createSuper(Trigger);\n\n // ensure `getContainer` will be called only once\n function Trigger(props) {\n var _this;\n\n _classCallCheck(this, Trigger);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"popupRef\", /*#__PURE__*/React.createRef());\n\n _defineProperty(_assertThisInitialized(_this), \"triggerRef\", /*#__PURE__*/React.createRef());\n\n _defineProperty(_assertThisInitialized(_this), \"portalContainer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"attachId\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"clickOutsideHandler\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"touchOutsideHandler\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"contextMenuOutsideHandler1\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"contextMenuOutsideHandler2\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"mouseDownTimeout\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"focusTime\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"preClickTime\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"preTouchTime\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"delayTimer\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"hasPopupMouseDown\", void 0);\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseEnter\", function (e) {\n var mouseEnterDelay = _this.props.mouseEnterDelay;\n\n _this.fireEvents('onMouseEnter', e);\n\n _this.delaySetPopupVisible(true, mouseEnterDelay, mouseEnterDelay ? null : e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseMove\", function (e) {\n _this.fireEvents('onMouseMove', e);\n\n _this.setPoint(e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function (e) {\n _this.fireEvents('onMouseLeave', e);\n\n _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onPopupMouseEnter\", function () {\n _this.clearDelayTimer();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onPopupMouseLeave\", function (e) {\n var _this$popupRef$curren;\n\n // https://github.com/react-component/trigger/pull/13\n // react bug?\n if (e.relatedTarget && !e.relatedTarget.setTimeout && contains((_this$popupRef$curren = _this.popupRef.current) === null || _this$popupRef$curren === void 0 ? void 0 : _this$popupRef$curren.getElement(), e.relatedTarget)) {\n return;\n }\n\n _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onFocus\", function (e) {\n _this.fireEvents('onFocus', e); // incase focusin and focusout\n\n\n _this.clearDelayTimer();\n\n if (_this.isFocusToShow()) {\n _this.focusTime = Date.now();\n\n _this.delaySetPopupVisible(true, _this.props.focusDelay);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onMouseDown\", function (e) {\n _this.fireEvents('onMouseDown', e);\n\n _this.preClickTime = Date.now();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onTouchStart\", function (e) {\n _this.fireEvents('onTouchStart', e);\n\n _this.preTouchTime = Date.now();\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onBlur\", function (e) {\n _this.fireEvents('onBlur', e);\n\n _this.clearDelayTimer();\n\n if (_this.isBlurToHide()) {\n _this.delaySetPopupVisible(false, _this.props.blurDelay);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onContextMenu\", function (e) {\n e.preventDefault();\n\n _this.fireEvents('onContextMenu', e);\n\n _this.setPopupVisible(true, e);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onContextMenuClose\", function () {\n if (_this.isContextMenuToShow()) {\n _this.close();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n _this.fireEvents('onClick', event); // focus will trigger click\n\n\n if (_this.focusTime) {\n var preTime;\n\n if (_this.preClickTime && _this.preTouchTime) {\n preTime = Math.min(_this.preClickTime, _this.preTouchTime);\n } else if (_this.preClickTime) {\n preTime = _this.preClickTime;\n } else if (_this.preTouchTime) {\n preTime = _this.preTouchTime;\n }\n\n if (Math.abs(preTime - _this.focusTime) < 20) {\n return;\n }\n\n _this.focusTime = 0;\n }\n\n _this.preClickTime = 0;\n _this.preTouchTime = 0; // Only prevent default when all the action is click.\n // https://github.com/ant-design/ant-design/issues/17043\n // https://github.com/ant-design/ant-design/issues/17291\n\n if (_this.isClickToShow() && (_this.isClickToHide() || _this.isBlurToHide()) && event && event.preventDefault) {\n event.preventDefault();\n }\n\n var nextVisible = !_this.state.popupVisible;\n\n if (_this.isClickToHide() && !nextVisible || nextVisible && _this.isClickToShow()) {\n _this.setPopupVisible(!_this.state.popupVisible, event);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onPopupMouseDown\", function () {\n _this.hasPopupMouseDown = true;\n clearTimeout(_this.mouseDownTimeout);\n _this.mouseDownTimeout = window.setTimeout(function () {\n _this.hasPopupMouseDown = false;\n }, 0);\n\n if (_this.context) {\n var _this$context;\n\n (_this$context = _this.context).onPopupMouseDown.apply(_this$context, arguments);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"onDocumentClick\", function (event) {\n if (_this.props.mask && !_this.props.maskClosable) {\n return;\n }\n\n var target = event.target;\n\n var root = _this.getRootDomNode();\n\n var popupNode = _this.getPopupDomNode();\n\n if ( // mousedown on the target should also close popup when action is contextMenu.\n // https://github.com/ant-design/ant-design/issues/29853\n (!contains(root, target) || _this.isContextMenuOnly()) && !contains(popupNode, target) && !_this.hasPopupMouseDown) {\n _this.close();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getRootDomNode\", function () {\n var getTriggerDOMNode = _this.props.getTriggerDOMNode;\n\n if (getTriggerDOMNode) {\n return getTriggerDOMNode(_this.triggerRef.current);\n }\n\n try {\n var domNode = findDOMNode(_this.triggerRef.current);\n\n if (domNode) {\n return domNode;\n }\n } catch (err) {// Do nothing\n }\n\n return ReactDOM.findDOMNode(_assertThisInitialized(_this));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getPopupClassNameFromAlign\", function (align) {\n var className = [];\n var _this$props = _this.props,\n popupPlacement = _this$props.popupPlacement,\n builtinPlacements = _this$props.builtinPlacements,\n prefixCls = _this$props.prefixCls,\n alignPoint = _this$props.alignPoint,\n getPopupClassNameFromAlign = _this$props.getPopupClassNameFromAlign;\n\n if (popupPlacement && builtinPlacements) {\n className.push(getAlignPopupClassName(builtinPlacements, prefixCls, align, alignPoint));\n }\n\n if (getPopupClassNameFromAlign) {\n className.push(getPopupClassNameFromAlign(align));\n }\n\n return className.join(' ');\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getComponent\", function () {\n var _this$props2 = _this.props,\n prefixCls = _this$props2.prefixCls,\n destroyPopupOnHide = _this$props2.destroyPopupOnHide,\n popupClassName = _this$props2.popupClassName,\n onPopupAlign = _this$props2.onPopupAlign,\n popupMotion = _this$props2.popupMotion,\n popupAnimation = _this$props2.popupAnimation,\n popupTransitionName = _this$props2.popupTransitionName,\n popupStyle = _this$props2.popupStyle,\n mask = _this$props2.mask,\n maskAnimation = _this$props2.maskAnimation,\n maskTransitionName = _this$props2.maskTransitionName,\n maskMotion = _this$props2.maskMotion,\n zIndex = _this$props2.zIndex,\n popup = _this$props2.popup,\n stretch = _this$props2.stretch,\n alignPoint = _this$props2.alignPoint,\n mobile = _this$props2.mobile,\n forceRender = _this$props2.forceRender,\n onPopupClick = _this$props2.onPopupClick;\n var _this$state = _this.state,\n popupVisible = _this$state.popupVisible,\n point = _this$state.point;\n\n var align = _this.getPopupAlign();\n\n var mouseProps = {};\n\n if (_this.isMouseEnterToShow()) {\n mouseProps.onMouseEnter = _this.onPopupMouseEnter;\n }\n\n if (_this.isMouseLeaveToHide()) {\n mouseProps.onMouseLeave = _this.onPopupMouseLeave;\n }\n\n mouseProps.onMouseDown = _this.onPopupMouseDown;\n mouseProps.onTouchStart = _this.onPopupMouseDown;\n return /*#__PURE__*/React.createElement(Popup, _extends({\n prefixCls: prefixCls,\n destroyPopupOnHide: destroyPopupOnHide,\n visible: popupVisible,\n point: alignPoint && point,\n className: popupClassName,\n align: align,\n onAlign: onPopupAlign,\n animation: popupAnimation,\n getClassNameFromAlign: _this.getPopupClassNameFromAlign\n }, mouseProps, {\n stretch: stretch,\n getRootDomNode: _this.getRootDomNode,\n style: popupStyle,\n mask: mask,\n zIndex: zIndex,\n transitionName: popupTransitionName,\n maskAnimation: maskAnimation,\n maskTransitionName: maskTransitionName,\n maskMotion: maskMotion,\n ref: _this.popupRef,\n motion: popupMotion,\n mobile: mobile,\n forceRender: forceRender,\n onClick: onPopupClick\n }), typeof popup === 'function' ? popup() : popup);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"attachParent\", function (popupContainer) {\n raf.cancel(_this.attachId);\n var _this$props3 = _this.props,\n getPopupContainer = _this$props3.getPopupContainer,\n getDocument = _this$props3.getDocument;\n\n var domNode = _this.getRootDomNode();\n\n var mountNode;\n\n if (!getPopupContainer) {\n mountNode = getDocument(_this.getRootDomNode()).body;\n } else if (domNode || getPopupContainer.length === 0) {\n // Compatible for legacy getPopupContainer with domNode argument.\n // If no need `domNode` argument, will call directly.\n // https://codesandbox.io/s/eloquent-mclean-ss93m?file=/src/App.js\n mountNode = getPopupContainer(domNode);\n }\n\n if (mountNode) {\n mountNode.appendChild(popupContainer);\n } else {\n // Retry after frame render in case parent not ready\n _this.attachId = raf(function () {\n _this.attachParent(popupContainer);\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"getContainer\", function () {\n if (!_this.portalContainer) {\n // In React.StrictMode component will call render multiple time in first mount.\n // When you want to refactor with FC, useRef will also init multiple time and\n // point to different useRef instance which will create multiple element\n // (This multiple render will not trigger effect so you can not clean up this\n // in effect). But this is safe with class component since it always point to same class instance.\n var getDocument = _this.props.getDocument;\n var popupContainer = getDocument(_this.getRootDomNode()).createElement('div'); // Make sure default popup container will never cause scrollbar appearing\n // https://github.com/react-component/trigger/issues/41\n\n popupContainer.style.position = 'absolute';\n popupContainer.style.top = '0';\n popupContainer.style.left = '0';\n popupContainer.style.width = '100%';\n _this.portalContainer = popupContainer;\n }\n\n _this.attachParent(_this.portalContainer);\n\n return _this.portalContainer;\n });\n\n _defineProperty(_assertThisInitialized(_this), \"setPoint\", function (point) {\n var alignPoint = _this.props.alignPoint;\n if (!alignPoint || !point) return;\n\n _this.setState({\n point: {\n pageX: point.pageX,\n pageY: point.pageY\n }\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handlePortalUpdate\", function () {\n if (_this.state.prevPopupVisible !== _this.state.popupVisible) {\n _this.props.afterPopupVisibleChange(_this.state.popupVisible);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"triggerContextValue\", {\n onPopupMouseDown: _this.onPopupMouseDown\n });\n\n var _popupVisible;\n\n if ('popupVisible' in props) {\n _popupVisible = !!props.popupVisible;\n } else {\n _popupVisible = !!props.defaultPopupVisible;\n }\n\n _this.state = {\n prevPopupVisible: _popupVisible,\n popupVisible: _popupVisible\n };\n ALL_HANDLERS.forEach(function (h) {\n _this[\"fire\".concat(h)] = function (e) {\n _this.fireEvents(h, e);\n };\n });\n return _this;\n }\n\n _createClass(Trigger, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.componentDidUpdate();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n var props = this.props;\n var state = this.state; // We must listen to `mousedown` or `touchstart`, edge case:\n // https://github.com/ant-design/ant-design/issues/5804\n // https://github.com/react-component/calendar/issues/250\n // https://github.com/react-component/trigger/issues/50\n\n if (state.popupVisible) {\n var currentDocument;\n\n if (!this.clickOutsideHandler && (this.isClickToHide() || this.isContextMenuToShow())) {\n currentDocument = props.getDocument(this.getRootDomNode());\n this.clickOutsideHandler = addEventListener(currentDocument, 'mousedown', this.onDocumentClick);\n } // always hide on mobile\n\n\n if (!this.touchOutsideHandler) {\n currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n this.touchOutsideHandler = addEventListener(currentDocument, 'touchstart', this.onDocumentClick);\n } // close popup when trigger type contains 'onContextMenu' and document is scrolling.\n\n\n if (!this.contextMenuOutsideHandler1 && this.isContextMenuToShow()) {\n currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n this.contextMenuOutsideHandler1 = addEventListener(currentDocument, 'scroll', this.onContextMenuClose);\n } // close popup when trigger type contains 'onContextMenu' and window is blur.\n\n\n if (!this.contextMenuOutsideHandler2 && this.isContextMenuToShow()) {\n this.contextMenuOutsideHandler2 = addEventListener(window, 'blur', this.onContextMenuClose);\n }\n\n return;\n }\n\n this.clearOutsideHandler();\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.clearDelayTimer();\n this.clearOutsideHandler();\n clearTimeout(this.mouseDownTimeout);\n raf.cancel(this.attachId);\n }\n }, {\n key: \"getPopupDomNode\",\n value: function getPopupDomNode() {\n var _this$popupRef$curren2;\n\n // for test\n return ((_this$popupRef$curren2 = this.popupRef.current) === null || _this$popupRef$curren2 === void 0 ? void 0 : _this$popupRef$curren2.getElement()) || null;\n }\n }, {\n key: \"getPopupAlign\",\n value: function getPopupAlign() {\n var props = this.props;\n var popupPlacement = props.popupPlacement,\n popupAlign = props.popupAlign,\n builtinPlacements = props.builtinPlacements;\n\n if (popupPlacement && builtinPlacements) {\n return getAlignFromPlacement(builtinPlacements, popupPlacement, popupAlign);\n }\n\n return popupAlign;\n }\n }, {\n key: \"setPopupVisible\",\n value:\n /**\n * @param popupVisible Show or not the popup element\n * @param event SyntheticEvent, used for `pointAlign`\n */\n function setPopupVisible(popupVisible, event) {\n var alignPoint = this.props.alignPoint;\n var prevPopupVisible = this.state.popupVisible;\n this.clearDelayTimer();\n\n if (prevPopupVisible !== popupVisible) {\n if (!('popupVisible' in this.props)) {\n this.setState({\n popupVisible: popupVisible,\n prevPopupVisible: prevPopupVisible\n });\n }\n\n this.props.onPopupVisibleChange(popupVisible);\n } // Always record the point position since mouseEnterDelay will delay the show\n\n\n if (alignPoint && event && popupVisible) {\n this.setPoint(event);\n }\n }\n }, {\n key: \"delaySetPopupVisible\",\n value: function delaySetPopupVisible(visible, delayS, event) {\n var _this2 = this;\n\n var delay = delayS * 1000;\n this.clearDelayTimer();\n\n if (delay) {\n var point = event ? {\n pageX: event.pageX,\n pageY: event.pageY\n } : null;\n this.delayTimer = window.setTimeout(function () {\n _this2.setPopupVisible(visible, point);\n\n _this2.clearDelayTimer();\n }, delay);\n } else {\n this.setPopupVisible(visible, event);\n }\n }\n }, {\n key: \"clearDelayTimer\",\n value: function clearDelayTimer() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n }\n }, {\n key: \"clearOutsideHandler\",\n value: function clearOutsideHandler() {\n if (this.clickOutsideHandler) {\n this.clickOutsideHandler.remove();\n this.clickOutsideHandler = null;\n }\n\n if (this.contextMenuOutsideHandler1) {\n this.contextMenuOutsideHandler1.remove();\n this.contextMenuOutsideHandler1 = null;\n }\n\n if (this.contextMenuOutsideHandler2) {\n this.contextMenuOutsideHandler2.remove();\n this.contextMenuOutsideHandler2 = null;\n }\n\n if (this.touchOutsideHandler) {\n this.touchOutsideHandler.remove();\n this.touchOutsideHandler = null;\n }\n }\n }, {\n key: \"createTwoChains\",\n value: function createTwoChains(event) {\n var childPros = this.props.children.props;\n var props = this.props;\n\n if (childPros[event] && props[event]) {\n return this[\"fire\".concat(event)];\n }\n\n return childPros[event] || props[event];\n }\n }, {\n key: \"isClickToShow\",\n value: function isClickToShow() {\n var _this$props4 = this.props,\n action = _this$props4.action,\n showAction = _this$props4.showAction;\n return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;\n }\n }, {\n key: \"isContextMenuOnly\",\n value: function isContextMenuOnly() {\n var action = this.props.action;\n return action === 'contextMenu' || action.length === 1 && action[0] === 'contextMenu';\n }\n }, {\n key: \"isContextMenuToShow\",\n value: function isContextMenuToShow() {\n var _this$props5 = this.props,\n action = _this$props5.action,\n showAction = _this$props5.showAction;\n return action.indexOf('contextMenu') !== -1 || showAction.indexOf('contextMenu') !== -1;\n }\n }, {\n key: \"isClickToHide\",\n value: function isClickToHide() {\n var _this$props6 = this.props,\n action = _this$props6.action,\n hideAction = _this$props6.hideAction;\n return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;\n }\n }, {\n key: \"isMouseEnterToShow\",\n value: function isMouseEnterToShow() {\n var _this$props7 = this.props,\n action = _this$props7.action,\n showAction = _this$props7.showAction;\n return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;\n }\n }, {\n key: \"isMouseLeaveToHide\",\n value: function isMouseLeaveToHide() {\n var _this$props8 = this.props,\n action = _this$props8.action,\n hideAction = _this$props8.hideAction;\n return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;\n }\n }, {\n key: \"isFocusToShow\",\n value: function isFocusToShow() {\n var _this$props9 = this.props,\n action = _this$props9.action,\n showAction = _this$props9.showAction;\n return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;\n }\n }, {\n key: \"isBlurToHide\",\n value: function isBlurToHide() {\n var _this$props10 = this.props,\n action = _this$props10.action,\n hideAction = _this$props10.hideAction;\n return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;\n }\n }, {\n key: \"forcePopupAlign\",\n value: function forcePopupAlign() {\n if (this.state.popupVisible) {\n var _this$popupRef$curren3;\n\n (_this$popupRef$curren3 = this.popupRef.current) === null || _this$popupRef$curren3 === void 0 ? void 0 : _this$popupRef$curren3.forceAlign();\n }\n }\n }, {\n key: \"fireEvents\",\n value: function fireEvents(type, e) {\n var childCallback = this.props.children.props[type];\n\n if (childCallback) {\n childCallback(e);\n }\n\n var callback = this.props[type];\n\n if (callback) {\n callback(e);\n }\n }\n }, {\n key: \"close\",\n value: function close() {\n this.setPopupVisible(false);\n }\n }, {\n key: \"render\",\n value: function render() {\n var popupVisible = this.state.popupVisible;\n var _this$props11 = this.props,\n children = _this$props11.children,\n forceRender = _this$props11.forceRender,\n alignPoint = _this$props11.alignPoint,\n className = _this$props11.className,\n autoDestroy = _this$props11.autoDestroy;\n var child = React.Children.only(children);\n var newChildProps = {\n key: 'trigger'\n }; // ============================== Visible Handlers ==============================\n // >>> ContextMenu\n\n if (this.isContextMenuToShow()) {\n newChildProps.onContextMenu = this.onContextMenu;\n } else {\n newChildProps.onContextMenu = this.createTwoChains('onContextMenu');\n } // >>> Click\n\n\n if (this.isClickToHide() || this.isClickToShow()) {\n newChildProps.onClick = this.onClick;\n newChildProps.onMouseDown = this.onMouseDown;\n newChildProps.onTouchStart = this.onTouchStart;\n } else {\n newChildProps.onClick = this.createTwoChains('onClick');\n newChildProps.onMouseDown = this.createTwoChains('onMouseDown');\n newChildProps.onTouchStart = this.createTwoChains('onTouchStart');\n } // >>> Hover(enter)\n\n\n if (this.isMouseEnterToShow()) {\n newChildProps.onMouseEnter = this.onMouseEnter; // Point align\n\n if (alignPoint) {\n newChildProps.onMouseMove = this.onMouseMove;\n }\n } else {\n newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');\n } // >>> Hover(leave)\n\n\n if (this.isMouseLeaveToHide()) {\n newChildProps.onMouseLeave = this.onMouseLeave;\n } else {\n newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');\n } // >>> Focus\n\n\n if (this.isFocusToShow() || this.isBlurToHide()) {\n newChildProps.onFocus = this.onFocus;\n newChildProps.onBlur = this.onBlur;\n } else {\n newChildProps.onFocus = this.createTwoChains('onFocus');\n newChildProps.onBlur = this.createTwoChains('onBlur');\n } // =================================== Render ===================================\n\n\n var childrenClassName = classNames(child && child.props && child.props.className, className);\n\n if (childrenClassName) {\n newChildProps.className = childrenClassName;\n }\n\n var cloneProps = _objectSpread({}, newChildProps);\n\n if (supportRef(child)) {\n cloneProps.ref = composeRef(this.triggerRef, child.ref);\n }\n\n var trigger = /*#__PURE__*/React.cloneElement(child, cloneProps);\n var portal; // prevent unmounting after it's rendered\n\n if (popupVisible || this.popupRef.current || forceRender) {\n portal = /*#__PURE__*/React.createElement(PortalComponent, {\n key: \"portal\",\n getContainer: this.getContainer,\n didUpdate: this.handlePortalUpdate\n }, this.getComponent());\n }\n\n if (!popupVisible && autoDestroy) {\n portal = null;\n }\n\n return /*#__PURE__*/React.createElement(TriggerContext.Provider, {\n value: this.triggerContextValue\n }, trigger, portal);\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(_ref, prevState) {\n var popupVisible = _ref.popupVisible;\n var newState = {};\n\n if (popupVisible !== undefined && prevState.popupVisible !== popupVisible) {\n newState.popupVisible = popupVisible;\n newState.prevPopupVisible = prevState.popupVisible;\n }\n\n return newState;\n }\n }]);\n\n return Trigger;\n }(React.Component);\n\n _defineProperty(Trigger, \"contextType\", TriggerContext);\n\n _defineProperty(Trigger, \"defaultProps\", {\n prefixCls: 'rc-trigger-popup',\n getPopupClassNameFromAlign: returnEmptyString,\n getDocument: returnDocument,\n onPopupVisibleChange: noop,\n afterPopupVisibleChange: noop,\n onPopupAlign: noop,\n popupClassName: '',\n mouseEnterDelay: 0,\n mouseLeaveDelay: 0.1,\n focusDelay: 0,\n blurDelay: 0.15,\n popupStyle: {},\n destroyPopupOnHide: false,\n popupAlign: {},\n defaultPopupVisible: false,\n mask: false,\n maskClosable: true,\n action: [],\n showAction: [],\n hideAction: [],\n autoDestroy: false\n });\n\n return Trigger;\n}\nexport default generateTrigger(Portal);","import React from 'react';\nimport { isFragment } from 'react-is';\nexport default function toArray(children) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var ret = [];\n React.Children.forEach(children, function (child) {\n if ((child === undefined || child === null) && !option.keepEmpty) {\n return;\n }\n if (Array.isArray(child)) {\n ret = ret.concat(toArray(child));\n } else if (isFragment(child) && child.props) {\n ret = ret.concat(toArray(child.props.children, option));\n } else {\n ret.push(child);\n }\n });\n return ret;\n}","import ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n /* eslint camelcase: 2 */\n var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n ReactDOM.unstable_batchedUpdates(cb, e);\n } : cb;\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, option);\n }\n return {\n remove: function remove() {\n if (target.removeEventListener) {\n target.removeEventListener(eventType, callback, option);\n }\n }\n };\n}","export default function canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","export default function contains(root, n) {\n if (!root) {\n return false;\n }\n\n // Use native if support\n if (root.contains) {\n return root.contains(n);\n }\n\n // `document.contains` not support with IE11\n var node = n;\n while (node) {\n if (node === root) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}","import canUseDom from \"./canUseDom\";\nimport contains from \"./contains\";\nvar APPEND_ORDER = 'data-rc-order';\nvar MARK_KEY = \"rc-util-key\";\nvar containerCache = new Map();\nfunction getMark() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n mark = _ref.mark;\n if (mark) {\n return mark.startsWith('data-') ? mark : \"data-\".concat(mark);\n }\n return MARK_KEY;\n}\nfunction getContainer(option) {\n if (option.attachTo) {\n return option.attachTo;\n }\n var head = document.querySelector('head');\n return head || document.body;\n}\nfunction getOrder(prepend) {\n if (prepend === 'queue') {\n return 'prependQueue';\n }\n return prepend ? 'prepend' : 'append';\n}\n\n/**\n * Find style which inject by rc-util\n */\nfunction findStyles(container) {\n return Array.from((containerCache.get(container) || container).children).filter(function (node) {\n return node.tagName === 'STYLE';\n });\n}\nexport function injectCSS(css) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!canUseDom()) {\n return null;\n }\n var csp = option.csp,\n prepend = option.prepend;\n var styleNode = document.createElement('style');\n styleNode.setAttribute(APPEND_ORDER, getOrder(prepend));\n if (csp !== null && csp !== void 0 && csp.nonce) {\n styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;\n }\n styleNode.innerHTML = css;\n var container = getContainer(option);\n var firstChild = container.firstChild;\n if (prepend) {\n // If is queue `prepend`, it will prepend first style and then append rest style\n if (prepend === 'queue') {\n var existStyle = findStyles(container).filter(function (node) {\n return ['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER));\n });\n if (existStyle.length) {\n container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);\n return styleNode;\n }\n }\n\n // Use `insertBefore` as `prepend`\n container.insertBefore(styleNode, firstChild);\n } else {\n container.appendChild(styleNode);\n }\n return styleNode;\n}\nfunction findExistNode(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var container = getContainer(option);\n return findStyles(container).find(function (node) {\n return node.getAttribute(getMark(option)) === key;\n });\n}\nexport function removeCSS(key) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var existNode = findExistNode(key, option);\n if (existNode) {\n var container = getContainer(option);\n container.removeChild(existNode);\n }\n}\n\n/**\n * qiankun will inject `appendChild` to insert into other\n */\nfunction syncRealContainer(container, option) {\n var cachedRealContainer = containerCache.get(container);\n\n // Find real container when not cached or cached container removed\n if (!cachedRealContainer || !contains(document, cachedRealContainer)) {\n var placeholderStyle = injectCSS('', option);\n var parentNode = placeholderStyle.parentNode;\n containerCache.set(container, parentNode);\n container.removeChild(placeholderStyle);\n }\n}\n\n/**\n * manually clear container cache to avoid global cache in unit testes\n */\nexport function clearContainerCache() {\n containerCache.clear();\n}\nexport function updateCSS(css, key) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var container = getContainer(option);\n\n // Sync real parent\n syncRealContainer(container, option);\n var existNode = findExistNode(key, option);\n if (existNode) {\n var _option$csp, _option$csp2;\n if ((_option$csp = option.csp) !== null && _option$csp !== void 0 && _option$csp.nonce && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {\n var _option$csp3;\n existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;\n }\n if (existNode.innerHTML !== css) {\n existNode.innerHTML = css;\n }\n return existNode;\n }\n var newNode = injectCSS(css, option);\n newNode.setAttribute(getMark(option), key);\n return newNode;\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n if (node instanceof HTMLElement) {\n return node;\n }\n if (node instanceof React.Component) {\n return ReactDOM.findDOMNode(node);\n }\n return null;\n}","export default (function (element) {\n if (!element) {\n return false;\n }\n if (element instanceof HTMLElement && element.offsetParent) {\n return true;\n }\n if (element instanceof SVGGraphicsElement && element.getBBox) {\n var _element$getBBox = element.getBBox(),\n width = _element$getBBox.width,\n height = _element$getBBox.height;\n if (width || height) {\n return true;\n }\n }\n if (element instanceof HTMLElement && element.getBoundingClientRect) {\n var _element$getBoundingC = element.getBoundingClientRect(),\n _width = _element$getBoundingC.width,\n _height = _element$getBoundingC.height;\n if (_width || _height) {\n return true;\n }\n }\n return false;\n});","/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nvar KeyCode = {\n /**\n * MAC_ENTER\n */\n MAC_ENTER: 3,\n /**\n * BACKSPACE\n */\n BACKSPACE: 8,\n /**\n * TAB\n */\n TAB: 9,\n /**\n * NUMLOCK on FF/Safari Mac\n */\n NUM_CENTER: 12,\n // NUMLOCK on FF/Safari Mac\n /**\n * ENTER\n */\n ENTER: 13,\n /**\n * SHIFT\n */\n SHIFT: 16,\n /**\n * CTRL\n */\n CTRL: 17,\n /**\n * ALT\n */\n ALT: 18,\n /**\n * PAUSE\n */\n PAUSE: 19,\n /**\n * CAPS_LOCK\n */\n CAPS_LOCK: 20,\n /**\n * ESC\n */\n ESC: 27,\n /**\n * SPACE\n */\n SPACE: 32,\n /**\n * PAGE_UP\n */\n PAGE_UP: 33,\n // also NUM_NORTH_EAST\n /**\n * PAGE_DOWN\n */\n PAGE_DOWN: 34,\n // also NUM_SOUTH_EAST\n /**\n * END\n */\n END: 35,\n // also NUM_SOUTH_WEST\n /**\n * HOME\n */\n HOME: 36,\n // also NUM_NORTH_WEST\n /**\n * LEFT\n */\n LEFT: 37,\n // also NUM_WEST\n /**\n * UP\n */\n UP: 38,\n // also NUM_NORTH\n /**\n * RIGHT\n */\n RIGHT: 39,\n // also NUM_EAST\n /**\n * DOWN\n */\n DOWN: 40,\n // also NUM_SOUTH\n /**\n * PRINT_SCREEN\n */\n PRINT_SCREEN: 44,\n /**\n * INSERT\n */\n INSERT: 45,\n // also NUM_INSERT\n /**\n * DELETE\n */\n DELETE: 46,\n // also NUM_DELETE\n /**\n * ZERO\n */\n ZERO: 48,\n /**\n * ONE\n */\n ONE: 49,\n /**\n * TWO\n */\n TWO: 50,\n /**\n * THREE\n */\n THREE: 51,\n /**\n * FOUR\n */\n FOUR: 52,\n /**\n * FIVE\n */\n FIVE: 53,\n /**\n * SIX\n */\n SIX: 54,\n /**\n * SEVEN\n */\n SEVEN: 55,\n /**\n * EIGHT\n */\n EIGHT: 56,\n /**\n * NINE\n */\n NINE: 57,\n /**\n * QUESTION_MARK\n */\n QUESTION_MARK: 63,\n // needs localization\n /**\n * A\n */\n A: 65,\n /**\n * B\n */\n B: 66,\n /**\n * C\n */\n C: 67,\n /**\n * D\n */\n D: 68,\n /**\n * E\n */\n E: 69,\n /**\n * F\n */\n F: 70,\n /**\n * G\n */\n G: 71,\n /**\n * H\n */\n H: 72,\n /**\n * I\n */\n I: 73,\n /**\n * J\n */\n J: 74,\n /**\n * K\n */\n K: 75,\n /**\n * L\n */\n L: 76,\n /**\n * M\n */\n M: 77,\n /**\n * N\n */\n N: 78,\n /**\n * O\n */\n O: 79,\n /**\n * P\n */\n P: 80,\n /**\n * Q\n */\n Q: 81,\n /**\n * R\n */\n R: 82,\n /**\n * S\n */\n S: 83,\n /**\n * T\n */\n T: 84,\n /**\n * U\n */\n U: 85,\n /**\n * V\n */\n V: 86,\n /**\n * W\n */\n W: 87,\n /**\n * X\n */\n X: 88,\n /**\n * Y\n */\n Y: 89,\n /**\n * Z\n */\n Z: 90,\n /**\n * META\n */\n META: 91,\n // WIN_KEY_LEFT\n /**\n * WIN_KEY_RIGHT\n */\n WIN_KEY_RIGHT: 92,\n /**\n * CONTEXT_MENU\n */\n CONTEXT_MENU: 93,\n /**\n * NUM_ZERO\n */\n NUM_ZERO: 96,\n /**\n * NUM_ONE\n */\n NUM_ONE: 97,\n /**\n * NUM_TWO\n */\n NUM_TWO: 98,\n /**\n * NUM_THREE\n */\n NUM_THREE: 99,\n /**\n * NUM_FOUR\n */\n NUM_FOUR: 100,\n /**\n * NUM_FIVE\n */\n NUM_FIVE: 101,\n /**\n * NUM_SIX\n */\n NUM_SIX: 102,\n /**\n * NUM_SEVEN\n */\n NUM_SEVEN: 103,\n /**\n * NUM_EIGHT\n */\n NUM_EIGHT: 104,\n /**\n * NUM_NINE\n */\n NUM_NINE: 105,\n /**\n * NUM_MULTIPLY\n */\n NUM_MULTIPLY: 106,\n /**\n * NUM_PLUS\n */\n NUM_PLUS: 107,\n /**\n * NUM_MINUS\n */\n NUM_MINUS: 109,\n /**\n * NUM_PERIOD\n */\n NUM_PERIOD: 110,\n /**\n * NUM_DIVISION\n */\n NUM_DIVISION: 111,\n /**\n * F1\n */\n F1: 112,\n /**\n * F2\n */\n F2: 113,\n /**\n * F3\n */\n F3: 114,\n /**\n * F4\n */\n F4: 115,\n /**\n * F5\n */\n F5: 116,\n /**\n * F6\n */\n F6: 117,\n /**\n * F7\n */\n F7: 118,\n /**\n * F8\n */\n F8: 119,\n /**\n * F9\n */\n F9: 120,\n /**\n * F10\n */\n F10: 121,\n /**\n * F11\n */\n F11: 122,\n /**\n * F12\n */\n F12: 123,\n /**\n * NUMLOCK\n */\n NUMLOCK: 144,\n /**\n * SEMICOLON\n */\n SEMICOLON: 186,\n // needs localization\n /**\n * DASH\n */\n DASH: 189,\n // needs localization\n /**\n * EQUALS\n */\n EQUALS: 187,\n // needs localization\n /**\n * COMMA\n */\n COMMA: 188,\n // needs localization\n /**\n * PERIOD\n */\n PERIOD: 190,\n // needs localization\n /**\n * SLASH\n */\n SLASH: 191,\n // needs localization\n /**\n * APOSTROPHE\n */\n APOSTROPHE: 192,\n // needs localization\n /**\n * SINGLE_QUOTE\n */\n SINGLE_QUOTE: 222,\n // needs localization\n /**\n * OPEN_SQUARE_BRACKET\n */\n OPEN_SQUARE_BRACKET: 219,\n // needs localization\n /**\n * BACKSLASH\n */\n BACKSLASH: 220,\n // needs localization\n /**\n * CLOSE_SQUARE_BRACKET\n */\n CLOSE_SQUARE_BRACKET: 221,\n // needs localization\n /**\n * WIN_KEY\n */\n WIN_KEY: 224,\n /**\n * MAC_FF_META\n */\n MAC_FF_META: 224,\n // Firefox (Gecko) fires this for the meta key instead of 91\n /**\n * WIN_IME\n */\n WIN_IME: 229,\n // ======================== Function ========================\n /**\n * whether text and modified key is entered at the same time.\n */\n isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e) {\n var keyCode = e.keyCode;\n if (e.altKey && !e.ctrlKey || e.metaKey ||\n // Function keys don't generate text\n keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12) {\n return false;\n }\n\n // The following keys are quite harmless, even in combination with\n // CTRL, ALT or SHIFT.\n switch (keyCode) {\n case KeyCode.ALT:\n case KeyCode.CAPS_LOCK:\n case KeyCode.CONTEXT_MENU:\n case KeyCode.CTRL:\n case KeyCode.DOWN:\n case KeyCode.END:\n case KeyCode.ESC:\n case KeyCode.HOME:\n case KeyCode.INSERT:\n case KeyCode.LEFT:\n case KeyCode.MAC_FF_META:\n case KeyCode.META:\n case KeyCode.NUMLOCK:\n case KeyCode.NUM_CENTER:\n case KeyCode.PAGE_DOWN:\n case KeyCode.PAGE_UP:\n case KeyCode.PAUSE:\n case KeyCode.PRINT_SCREEN:\n case KeyCode.RIGHT:\n case KeyCode.SHIFT:\n case KeyCode.UP:\n case KeyCode.WIN_KEY:\n case KeyCode.WIN_KEY_RIGHT:\n return false;\n default:\n return true;\n }\n },\n /**\n * whether character is entered.\n */\n isCharacterKey: function isCharacterKey(keyCode) {\n if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {\n return true;\n }\n if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {\n return true;\n }\n if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {\n return true;\n }\n\n // Safari sends zero key code for non-latin characters.\n if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {\n return true;\n }\n switch (keyCode) {\n case KeyCode.SPACE:\n case KeyCode.QUESTION_MARK:\n case KeyCode.NUM_PLUS:\n case KeyCode.NUM_MINUS:\n case KeyCode.NUM_PERIOD:\n case KeyCode.NUM_DIVISION:\n case KeyCode.SEMICOLON:\n case KeyCode.DASH:\n case KeyCode.EQUALS:\n case KeyCode.COMMA:\n case KeyCode.PERIOD:\n case KeyCode.SLASH:\n case KeyCode.APOSTROPHE:\n case KeyCode.SINGLE_QUOTE:\n case KeyCode.OPEN_SQUARE_BRACKET:\n case KeyCode.BACKSLASH:\n case KeyCode.CLOSE_SQUARE_BRACKET:\n return true;\n default:\n return false;\n }\n }\n};\nexport default KeyCode;","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as ReactDOM from 'react-dom';\n// Let compiler not to search module usage\nvar fullClone = _objectSpread({}, ReactDOM);\nvar version = fullClone.version,\n reactRender = fullClone.render,\n unmountComponentAtNode = fullClone.unmountComponentAtNode;\nvar createRoot;\ntry {\n var mainVersion = Number((version || '').split('.')[0]);\n if (mainVersion >= 18) {\n createRoot = fullClone.createRoot;\n }\n} catch (e) {\n // Do nothing;\n}\nfunction toggleWarning(skip) {\n var __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = fullClone.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n if (__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && _typeof(__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === 'object') {\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip;\n }\n}\nvar MARK = '__rc_react_root__';\n\n// ========================== Render ==========================\n\nfunction modernRender(node, container) {\n toggleWarning(true);\n var root = container[MARK] || createRoot(container);\n toggleWarning(false);\n root.render(node);\n container[MARK] = root;\n}\nfunction legacyRender(node, container) {\n reactRender(node, container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _r(node, container) {\n if (process.env.NODE_ENV !== 'production') {\n return legacyRender(node, container);\n }\n}\nexport function render(node, container) {\n if (createRoot) {\n modernRender(node, container);\n return;\n }\n legacyRender(node, container);\n}\n\n// ========================= Unmount ==========================\nfunction modernUnmount(_x) {\n return _modernUnmount.apply(this, arguments);\n}\nfunction _modernUnmount() {\n _modernUnmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(container) {\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n return _context.abrupt(\"return\", Promise.resolve().then(function () {\n var _container$MARK;\n (_container$MARK = container[MARK]) === null || _container$MARK === void 0 ? void 0 : _container$MARK.unmount();\n delete container[MARK];\n }));\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _modernUnmount.apply(this, arguments);\n}\nfunction legacyUnmount(container) {\n unmountComponentAtNode(container);\n}\n\n/** @private Test usage. Not work in prod */\nexport function _u(container) {\n if (process.env.NODE_ENV !== 'production') {\n return legacyUnmount(container);\n }\n}\nexport function unmount(_x2) {\n return _unmount.apply(this, arguments);\n}\nfunction _unmount() {\n _unmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(container) {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n if (!(createRoot !== undefined)) {\n _context2.next = 2;\n break;\n }\n return _context2.abrupt(\"return\", modernUnmount(container));\n case 2:\n legacyUnmount(container);\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return _unmount.apply(this, arguments);\n}","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nvar useLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nexport default useLayoutEffect;\nexport var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {\n var firstMountRef = React.useRef(true);\n useLayoutEffect(function () {\n if (!firstMountRef.current) {\n return callback();\n }\n }, deps);\n\n // We tell react that first mount has passed\n useLayoutEffect(function () {\n firstMountRef.current = false;\n return function () {\n firstMountRef.current = true;\n };\n }, []);\n};","import * as React from 'react';\nexport default function useMemo(getValue, condition, shouldUpdate) {\n var cacheRef = React.useRef({});\n if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {\n cacheRef.current.value = getValue();\n cacheRef.current.condition = condition;\n }\n return cacheRef.current.value;\n}","import * as React from 'react';\nexport default function useEvent(callback) {\n var fnRef = React.useRef();\n fnRef.current = callback;\n var memoFn = React.useCallback(function () {\n var _fnRef$current;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return (_fnRef$current = fnRef.current) === null || _fnRef$current === void 0 ? void 0 : _fnRef$current.call.apply(_fnRef$current, [fnRef].concat(args));\n }, []);\n return memoFn;\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useEvent from \"./useEvent\";\nimport { useLayoutUpdateEffect } from \"./useLayoutEffect\";\nimport useState from \"./useState\";\n/** We only think `undefined` is empty */\nfunction hasValue(value) {\n return value !== undefined;\n}\n\n/**\n * Similar to `useState` but will use props value if provided.\n * Note that internal use rc-util `useState` hook.\n */\nexport default function useMergedState(defaultStateValue, option) {\n var _ref = option || {},\n defaultValue = _ref.defaultValue,\n value = _ref.value,\n onChange = _ref.onChange,\n postState = _ref.postState;\n\n // ======================= Init =======================\n var _useState = useState(function () {\n if (hasValue(value)) {\n return value;\n } else if (hasValue(defaultValue)) {\n return typeof defaultValue === 'function' ? defaultValue() : defaultValue;\n } else {\n return typeof defaultStateValue === 'function' ? defaultStateValue() : defaultStateValue;\n }\n }),\n _useState2 = _slicedToArray(_useState, 2),\n innerValue = _useState2[0],\n setInnerValue = _useState2[1];\n var mergedValue = value !== undefined ? value : innerValue;\n var postMergedValue = postState ? postState(mergedValue) : mergedValue;\n\n // ====================== Change ======================\n var onChangeFn = useEvent(onChange);\n var _useState3 = useState([mergedValue]),\n _useState4 = _slicedToArray(_useState3, 2),\n prevValue = _useState4[0],\n setPrevValue = _useState4[1];\n useLayoutUpdateEffect(function () {\n var prev = prevValue[0];\n if (innerValue !== prev) {\n onChangeFn(innerValue, prev);\n }\n }, [prevValue]);\n\n // Sync value back to `undefined` when it from control to un-control\n useLayoutUpdateEffect(function () {\n if (!hasValue(value)) {\n setInnerValue(value);\n }\n }, [value]);\n\n // ====================== Update ======================\n var triggerChange = useEvent(function (updater, ignoreDestroy) {\n setInnerValue(updater, ignoreDestroy);\n setPrevValue([mergedValue], ignoreDestroy);\n });\n return [postMergedValue, triggerChange];\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nexport default function useSafeState(defaultValue) {\n var destroyRef = React.useRef(false);\n var _React$useState = React.useState(defaultValue),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n value = _React$useState2[0],\n setValue = _React$useState2[1];\n React.useEffect(function () {\n destroyRef.current = false;\n return function () {\n destroyRef.current = true;\n };\n }, []);\n function safeSetState(updater, ignoreDestroy) {\n if (ignoreDestroy && destroyRef.current) {\n return;\n }\n setValue(updater);\n }\n return [value, safeSetState];\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2) {\n var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n var refSet = new Set();\n function deepEqual(a, b) {\n var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var circular = refSet.has(a);\n warning(!circular, 'Warning: There may be circular references');\n if (circular) {\n return false;\n }\n if (a === b) {\n return true;\n }\n if (shallow && level > 1) {\n return false;\n }\n refSet.add(a);\n var newLevel = level + 1;\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (var i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i], newLevel)) {\n return false;\n }\n }\n return true;\n }\n if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n var keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) {\n return false;\n }\n return keys.every(function (key) {\n return deepEqual(a[key], b[key], newLevel);\n });\n }\n // other\n return false;\n }\n return deepEqual(obj1, obj2);\n}\nexport default isEqual;","export default (function () {\n if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n return false;\n }\n var agent = navigator.userAgent || navigator.vendor || window.opera;\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent === null || agent === void 0 ? void 0 : agent.substr(0, 4));\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nexport default function omit(obj, fields) {\n var clone = _objectSpread({}, obj);\n if (Array.isArray(fields)) {\n fields.forEach(function (key) {\n delete clone[key];\n });\n }\n return clone;\n}","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nvar attributes = \"accept acceptCharset accessKey action allowFullScreen allowTransparency\\n alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\\n charSet checked classID className colSpan cols content contentEditable contextMenu\\n controls coords crossOrigin data dateTime default defer dir disabled download draggable\\n encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\\n headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\\n is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\\n mediaGroup method min minLength multiple muted name noValidate nonce open\\n optimum pattern placeholder poster preload radioGroup readOnly rel required\\n reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\\n shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\\n summary tabIndex target title type useMap value width wmode wrap\";\nvar eventsName = \"onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\\n onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\\n onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\\n onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\\n onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\\n onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\\n onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError\";\nvar propList = \"\".concat(attributes, \" \").concat(eventsName).split(/[\\s\\n]+/);\n\n/* eslint-enable max-len */\nvar ariaPrefix = 'aria-';\nvar dataPrefix = 'data-';\nfunction match(key, prefix) {\n return key.indexOf(prefix) === 0;\n}\n/**\n * Picker props from exist props with filter\n * @param props Passed props\n * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config\n */\nexport default function pickAttrs(props) {\n var ariaOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var mergedConfig;\n if (ariaOnly === false) {\n mergedConfig = {\n aria: true,\n data: true,\n attr: true\n };\n } else if (ariaOnly === true) {\n mergedConfig = {\n aria: true\n };\n } else {\n mergedConfig = _objectSpread({}, ariaOnly);\n }\n var attrs = {};\n Object.keys(props).forEach(function (key) {\n if (\n // Aria\n mergedConfig.aria && (key === 'role' || match(key, ariaPrefix)) ||\n // Data\n mergedConfig.data && match(key, dataPrefix) ||\n // Attr\n mergedConfig.attr && propList.includes(key)) {\n attrs[key] = props[key];\n }\n });\n return attrs;\n}","var raf = function raf(callback) {\n return +setTimeout(callback, 16);\n};\nvar caf = function caf(num) {\n return clearTimeout(num);\n};\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n raf = function raf(callback) {\n return window.requestAnimationFrame(callback);\n };\n caf = function caf(handle) {\n return window.cancelAnimationFrame(handle);\n };\n}\nvar rafUUID = 0;\nvar rafIds = new Map();\nfunction cleanup(id) {\n rafIds.delete(id);\n}\nvar wrapperRaf = function wrapperRaf(callback) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n rafUUID += 1;\n var id = rafUUID;\n function callRef(leftTimes) {\n if (leftTimes === 0) {\n // Clean up\n cleanup(id);\n\n // Trigger\n callback();\n } else {\n // Next raf\n var realId = raf(function () {\n callRef(leftTimes - 1);\n });\n\n // Bind real raf id\n rafIds.set(id, realId);\n }\n }\n callRef(times);\n return id;\n};\nwrapperRaf.cancel = function (id) {\n var realId = rafIds.get(id);\n cleanup(realId);\n return caf(realId);\n};\nexport default wrapperRaf;","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable no-param-reassign */\n\nimport { isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nexport function fillRef(ref, node) {\n if (typeof ref === 'function') {\n ref(node);\n } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n ref.current = node;\n }\n}\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport function composeRef() {\n for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n refs[_key] = arguments[_key];\n }\n var refList = refs.filter(function (ref) {\n return ref;\n });\n if (refList.length <= 1) {\n return refList[0];\n }\n return function (node) {\n refs.forEach(function (ref) {\n fillRef(ref, node);\n });\n };\n}\nexport function useComposeRef() {\n for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n refs[_key2] = arguments[_key2];\n }\n return useMemo(function () {\n return composeRef.apply(void 0, refs);\n }, refs, function (prev, next) {\n return prev.length === next.length && prev.every(function (ref, i) {\n return ref === next[i];\n });\n });\n}\nexport function supportRef(nodeOrComponent) {\n var _type$prototype, _nodeOrComponent$prot;\n var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n // Function component node\n if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render)) {\n return false;\n }\n\n // Class component\n if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render)) {\n return false;\n }\n return true;\n}\n/* eslint-enable */","/* eslint-disable no-console */\nvar warned = {};\nexport function warning(valid, message) {\n // Support uglify\n if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n console.error(\"Warning: \".concat(message));\n }\n}\nexport function note(valid, message) {\n // Support uglify\n if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n console.warn(\"Note: \".concat(message));\n }\n}\nexport function resetWarned() {\n warned = {};\n}\nexport function call(method, valid, message) {\n if (!valid && !warned[message]) {\n method(false, message);\n warned[message] = true;\n }\n}\nexport function warningOnce(valid, message) {\n call(warning, valid, message);\n}\nexport function noteOnce(valid, message) {\n call(note, valid, message);\n}\nexport default warningOnce;\n/* eslint-enable */","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3\n//\nclass Draggable extends React.Component /*:: */{\n // React 16.3+\n // Arity (props, state)\n static getDerivedStateFromProps(_ref /*:: */, _ref2 /*:: */) /*: ?Partial*/{\n let {\n position\n } /*: DraggableProps*/ = _ref /*: DraggableProps*/;\n let {\n prevPropsPosition\n } /*: DraggableState*/ = _ref2 /*: DraggableState*/;\n // Set x/y if a new position is provided in props that is different than the previous.\n if (position && (!prevPropsPosition || position.x !== prevPropsPosition.x || position.y !== prevPropsPosition.y)) {\n (0, _log.default)('Draggable: getDerivedStateFromProps %j', {\n position,\n prevPropsPosition\n });\n return {\n x: position.x,\n y: position.y,\n prevPropsPosition: {\n ...position\n }\n };\n }\n return null;\n }\n constructor(props /*: DraggableProps*/) {\n super(props);\n _defineProperty(this, \"onDragStart\", (e, coreData) => {\n (0, _log.default)('Draggable: onDragStart: %j', coreData);\n\n // Short-circuit if user's callback killed it.\n const shouldStart = this.props.onStart(e, (0, _positionFns.createDraggableData)(this, coreData));\n // Kills start event on core as well, so move handlers are never bound.\n if (shouldStart === false) return false;\n this.setState({\n dragging: true,\n dragged: true\n });\n });\n _defineProperty(this, \"onDrag\", (e, coreData) => {\n if (!this.state.dragging) return false;\n (0, _log.default)('Draggable: onDrag: %j', coreData);\n const uiData = (0, _positionFns.createDraggableData)(this, coreData);\n const newState = {\n x: uiData.x,\n y: uiData.y,\n slackX: 0,\n slackY: 0\n };\n\n // Keep within bounds.\n if (this.props.bounds) {\n // Save original x and y.\n const {\n x,\n y\n } = newState;\n\n // Add slack to the values used to calculate bound position. This will ensure that if\n // we start removing slack, the element won't react to it right away until it's been\n // completely removed.\n newState.x += this.state.slackX;\n newState.y += this.state.slackY;\n\n // Get bound position. This will ceil/floor the x and y within the boundaries.\n const [newStateX, newStateY] = (0, _positionFns.getBoundPosition)(this, newState.x, newState.y);\n newState.x = newStateX;\n newState.y = newStateY;\n\n // Recalculate slack by noting how much was shaved by the boundPosition handler.\n newState.slackX = this.state.slackX + (x - newState.x);\n newState.slackY = this.state.slackY + (y - newState.y);\n\n // Update the event we fire to reflect what really happened after bounds took effect.\n uiData.x = newState.x;\n uiData.y = newState.y;\n uiData.deltaX = newState.x - this.state.x;\n uiData.deltaY = newState.y - this.state.y;\n }\n\n // Short-circuit if user's callback killed it.\n const shouldUpdate = this.props.onDrag(e, uiData);\n if (shouldUpdate === false) return false;\n this.setState(newState);\n });\n _defineProperty(this, \"onDragStop\", (e, coreData) => {\n if (!this.state.dragging) return false;\n\n // Short-circuit if user's callback killed it.\n const shouldContinue = this.props.onStop(e, (0, _positionFns.createDraggableData)(this, coreData));\n if (shouldContinue === false) return false;\n (0, _log.default)('Draggable: onDragStop: %j', coreData);\n const newState /*: Partial*/ = {\n dragging: false,\n slackX: 0,\n slackY: 0\n };\n\n // If this is a controlled component, the result of this operation will be to\n // revert back to the old position. We expect a handler on `onDragStop`, at the least.\n const controlled = Boolean(this.props.position);\n if (controlled) {\n const {\n x,\n y\n } = this.props.position;\n newState.x = x;\n newState.y = y;\n }\n this.setState(newState);\n });\n this.state = {\n // Whether or not we are currently dragging.\n dragging: false,\n // Whether or not we have been dragged before.\n dragged: false,\n // Current transform x and y.\n x: props.position ? props.position.x : props.defaultPosition.x,\n y: props.position ? props.position.y : props.defaultPosition.y,\n prevPropsPosition: {\n ...props.position\n },\n // Used for compensating for out-of-bounds drags\n slackX: 0,\n slackY: 0,\n // Can only determine if SVG after mounting\n isElementSVG: false\n };\n if (props.position && !(props.onDrag || props.onStop)) {\n // eslint-disable-next-line no-console\n console.warn('A `position` was applied to this , without drag handlers. This will make this ' + 'component effectively undraggable. Please attach `onDrag` or `onStop` handlers so you can adjust the ' + '`position` of this element.');\n }\n }\n componentDidMount() {\n // Check to see if the element passed is an instanceof SVGElement\n if (typeof window.SVGElement !== 'undefined' && this.findDOMNode() instanceof window.SVGElement) {\n this.setState({\n isElementSVG: true\n });\n }\n }\n componentWillUnmount() {\n this.setState({\n dragging: false\n }); // prevents invariant if unmounted while dragging\n }\n\n // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n findDOMNode() /*: ?HTMLElement*/{\n var _this$props$nodeRef$c, _this$props;\n return (_this$props$nodeRef$c = (_this$props = this.props) === null || _this$props === void 0 || (_this$props = _this$props.nodeRef) === null || _this$props === void 0 ? void 0 : _this$props.current) !== null && _this$props$nodeRef$c !== void 0 ? _this$props$nodeRef$c : _reactDom.default.findDOMNode(this);\n }\n render() /*: ReactElement*/{\n const {\n axis,\n bounds,\n children,\n defaultPosition,\n defaultClassName,\n defaultClassNameDragging,\n defaultClassNameDragged,\n position,\n positionOffset,\n scale,\n ...draggableCoreProps\n } = this.props;\n let style = {};\n let svgTransform = null;\n\n // If this is controlled, we don't want to move it - unless it's dragging.\n const controlled = Boolean(position);\n const draggable = !controlled || this.state.dragging;\n const validPosition = position || defaultPosition;\n const transformOpts = {\n // Set left if horizontal drag is enabled\n x: (0, _positionFns.canDragX)(this) && draggable ? this.state.x : validPosition.x,\n // Set top if vertical drag is enabled\n y: (0, _positionFns.canDragY)(this) && draggable ? this.state.y : validPosition.y\n };\n\n // If this element was SVG, we use the `transform` attribute.\n if (this.state.isElementSVG) {\n svgTransform = (0, _domFns.createSVGTransform)(transformOpts, positionOffset);\n } else {\n // Add a CSS transform to move the element around. This allows us to move the element around\n // without worrying about whether or not it is relatively or absolutely positioned.\n // If the item you are dragging already has a transform set, wrap it in a so \n // has a clean slate.\n style = (0, _domFns.createCSSTransform)(transformOpts, positionOffset);\n }\n\n // Mark with class while dragging\n const className = (0, _clsx.default)(children.props.className || '', defaultClassName, {\n [defaultClassNameDragging]: this.state.dragging,\n [defaultClassNameDragged]: this.state.dragged\n });\n\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return /*#__PURE__*/React.createElement(_DraggableCore.default, _extends({}, draggableCoreProps, {\n onStart: this.onDragStart,\n onDrag: this.onDrag,\n onStop: this.onDragStop\n }), /*#__PURE__*/React.cloneElement(React.Children.only(children), {\n className: className,\n style: {\n ...children.props.style,\n ...style\n },\n transform: svgTransform\n }));\n }\n}\nexports.default = Draggable;\n_defineProperty(Draggable, \"displayName\", 'Draggable');\n_defineProperty(Draggable, \"propTypes\", {\n // Accepts all props accepts.\n ..._DraggableCore.default.propTypes,\n /**\n * `axis` determines which axis the draggable can move.\n *\n * Note that all callbacks will still return data as normal. This only\n * controls flushing to the DOM.\n *\n * 'both' allows movement horizontally and vertically.\n * 'x' limits movement to horizontal axis.\n * 'y' limits movement to vertical axis.\n * 'none' limits all movement.\n *\n * Defaults to 'both'.\n */\n axis: _propTypes.default.oneOf(['both', 'x', 'y', 'none']),\n /**\n * `bounds` determines the range of movement available to the element.\n * Available values are:\n *\n * 'parent' restricts movement within the Draggable's parent node.\n *\n * Alternatively, pass an object with the following properties, all of which are optional:\n *\n * {left: LEFT_BOUND, right: RIGHT_BOUND, bottom: BOTTOM_BOUND, top: TOP_BOUND}\n *\n * All values are in px.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
Content
\n *
\n * );\n * }\n * });\n * ```\n */\n bounds: _propTypes.default.oneOfType([_propTypes.default.shape({\n left: _propTypes.default.number,\n right: _propTypes.default.number,\n top: _propTypes.default.number,\n bottom: _propTypes.default.number\n }), _propTypes.default.string, _propTypes.default.oneOf([false])]),\n defaultClassName: _propTypes.default.string,\n defaultClassNameDragging: _propTypes.default.string,\n defaultClassNameDragged: _propTypes.default.string,\n /**\n * `defaultPosition` specifies the x and y that the dragged item should start at\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n defaultPosition: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n positionOffset: _propTypes.default.shape({\n x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),\n y: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])\n }),\n /**\n * `position`, if present, defines the current position of the element.\n *\n * This is similar to how form elements in React work - if no `position` is supplied, the component\n * is uncontrolled.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
I start with transformX: 25px and transformY: 25px;
\n *
\n * );\n * }\n * });\n * ```\n */\n position: _propTypes.default.shape({\n x: _propTypes.default.number,\n y: _propTypes.default.number\n }),\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n_defineProperty(Draggable, \"defaultProps\", {\n ..._DraggableCore.default.defaultProps,\n axis: 'both',\n bounds: false,\n defaultClassName: 'react-draggable',\n defaultClassNameDragging: 'react-draggable-dragging',\n defaultClassNameDragged: 'react-draggable-dragged',\n defaultPosition: {\n x: 0,\n y: 0\n },\n scale: 1\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar React = _interopRequireWildcard(require(\"react\"));\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\nvar _domFns = require(\"./utils/domFns\");\nvar _positionFns = require(\"./utils/positionFns\");\nvar _shims = require(\"./utils/shims\");\nvar _log = _interopRequireDefault(require(\"./utils/log\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*:: import type {EventHandler, MouseTouchEvent} from './utils/types';*/\n/*:: import type {Element as ReactElement} from 'react';*/\n// Simple abstraction for dragging events names.\nconst eventsFor = {\n touch: {\n start: 'touchstart',\n move: 'touchmove',\n stop: 'touchend'\n },\n mouse: {\n start: 'mousedown',\n move: 'mousemove',\n stop: 'mouseup'\n }\n};\n\n// Default to mouse events.\nlet dragEventFor = eventsFor.mouse;\n/*:: export type DraggableData = {\n node: HTMLElement,\n x: number, y: number,\n deltaX: number, deltaY: number,\n lastX: number, lastY: number,\n};*/\n/*:: export type DraggableEventHandler = (e: MouseEvent, data: DraggableData) => void | false;*/\n/*:: export type ControlPosition = {x: number, y: number};*/\n/*:: export type PositionOffsetControlPosition = {x: number|string, y: number|string};*/\n/*:: export type DraggableCoreDefaultProps = {\n allowAnyClick: boolean,\n disabled: boolean,\n enableUserSelectHack: boolean,\n onStart: DraggableEventHandler,\n onDrag: DraggableEventHandler,\n onStop: DraggableEventHandler,\n onMouseDown: (e: MouseEvent) => void,\n scale: number,\n};*/\n/*:: export type DraggableCoreProps = {\n ...DraggableCoreDefaultProps,\n cancel: string,\n children: ReactElement,\n offsetParent: HTMLElement,\n grid: [number, number],\n handle: string,\n nodeRef?: ?React.ElementRef,\n};*/\n//\n// Define .\n//\n// is for advanced usage of . It maintains minimal internal state so it can\n// work well with libraries that require more control over the element.\n//\n\nclass DraggableCore extends React.Component /*:: */{\n constructor() {\n super(...arguments);\n _defineProperty(this, \"dragging\", false);\n // Used while dragging to determine deltas.\n _defineProperty(this, \"lastX\", NaN);\n _defineProperty(this, \"lastY\", NaN);\n _defineProperty(this, \"touchIdentifier\", null);\n _defineProperty(this, \"mounted\", false);\n _defineProperty(this, \"handleDragStart\", e => {\n // Make it possible to attach event handlers on top of this one.\n this.props.onMouseDown(e);\n\n // Only accept left-clicks.\n if (!this.props.allowAnyClick && typeof e.button === 'number' && e.button !== 0) return false;\n\n // Get nodes. Be sure to grab relative document (could be iframed)\n const thisNode = this.findDOMNode();\n if (!thisNode || !thisNode.ownerDocument || !thisNode.ownerDocument.body) {\n throw new Error(' not mounted on DragStart!');\n }\n const {\n ownerDocument\n } = thisNode;\n\n // Short circuit if handle or cancel prop was provided and selector doesn't match.\n if (this.props.disabled || !(e.target instanceof ownerDocument.defaultView.Node) || this.props.handle && !(0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.handle, thisNode) || this.props.cancel && (0, _domFns.matchesSelectorAndParentsTo)(e.target, this.props.cancel, thisNode)) {\n return;\n }\n\n // Prevent scrolling on mobile devices, like ipad/iphone.\n // Important that this is after handle/cancel.\n if (e.type === 'touchstart') e.preventDefault();\n\n // Set touch identifier in component state if this is a touch event. This allows us to\n // distinguish between individual touches on multitouch screens by identifying which\n // touchpoint was set to this element.\n const touchIdentifier = (0, _domFns.getTouchIdentifier)(e);\n this.touchIdentifier = touchIdentifier;\n\n // Get the current drag point from the event. This is used as the offset.\n const position = (0, _positionFns.getControlPosition)(e, touchIdentifier, this);\n if (position == null) return; // not possible but satisfies flow\n const {\n x,\n y\n } = position;\n\n // Create an event object with all the data parents need to make a decision here.\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n (0, _log.default)('DraggableCore: handleDragStart: %j', coreEvent);\n\n // Call event handler. If it returns explicit false, cancel.\n (0, _log.default)('calling', this.props.onStart);\n const shouldUpdate = this.props.onStart(e, coreEvent);\n if (shouldUpdate === false || this.mounted === false) return;\n\n // Add a style to the body to disable user-select. This prevents text from\n // being selected all over the page.\n if (this.props.enableUserSelectHack) (0, _domFns.addUserSelectStyles)(ownerDocument);\n\n // Initiate dragging. Set the current x and y as offsets\n // so we know how much we've moved during the drag. This allows us\n // to drag elements around even if they have been moved, without issue.\n this.dragging = true;\n this.lastX = x;\n this.lastY = y;\n\n // Add events to the document directly so we catch when the user's mouse/touch moves outside of\n // this element. We use different events depending on whether or not we have detected that this\n // is a touch-capable device.\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.move, this.handleDrag);\n (0, _domFns.addEvent)(ownerDocument, dragEventFor.stop, this.handleDragStop);\n });\n _defineProperty(this, \"handleDrag\", e => {\n // Get the current drag point from the event. This is used as the offset.\n const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n if (position == null) return;\n let {\n x,\n y\n } = position;\n\n // Snap to grid if prop has been provided\n if (Array.isArray(this.props.grid)) {\n let deltaX = x - this.lastX,\n deltaY = y - this.lastY;\n [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n if (!deltaX && !deltaY) return; // skip useless drag\n x = this.lastX + deltaX, y = this.lastY + deltaY;\n }\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n (0, _log.default)('DraggableCore: handleDrag: %j', coreEvent);\n\n // Call event handler. If it returns explicit false, trigger end.\n const shouldUpdate = this.props.onDrag(e, coreEvent);\n if (shouldUpdate === false || this.mounted === false) {\n try {\n // $FlowIgnore\n this.handleDragStop(new MouseEvent('mouseup'));\n } catch (err) {\n // Old browsers\n const event = ((document.createEvent('MouseEvents') /*: any*/) /*: MouseTouchEvent*/);\n // I see why this insanity was deprecated\n // $FlowIgnore\n event.initMouseEvent('mouseup', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n this.handleDragStop(event);\n }\n return;\n }\n this.lastX = x;\n this.lastY = y;\n });\n _defineProperty(this, \"handleDragStop\", e => {\n if (!this.dragging) return;\n const position = (0, _positionFns.getControlPosition)(e, this.touchIdentifier, this);\n if (position == null) return;\n let {\n x,\n y\n } = position;\n\n // Snap to grid if prop has been provided\n if (Array.isArray(this.props.grid)) {\n let deltaX = x - this.lastX || 0;\n let deltaY = y - this.lastY || 0;\n [deltaX, deltaY] = (0, _positionFns.snapToGrid)(this.props.grid, deltaX, deltaY);\n x = this.lastX + deltaX, y = this.lastY + deltaY;\n }\n const coreEvent = (0, _positionFns.createCoreData)(this, x, y);\n\n // Call event handler\n const shouldContinue = this.props.onStop(e, coreEvent);\n if (shouldContinue === false || this.mounted === false) return false;\n const thisNode = this.findDOMNode();\n if (thisNode) {\n // Remove user-select hack\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(thisNode.ownerDocument);\n }\n (0, _log.default)('DraggableCore: handleDragStop: %j', coreEvent);\n\n // Reset the el.\n this.dragging = false;\n this.lastX = NaN;\n this.lastY = NaN;\n if (thisNode) {\n // Remove event handlers\n (0, _log.default)('DraggableCore: Removing handlers');\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.move, this.handleDrag);\n (0, _domFns.removeEvent)(thisNode.ownerDocument, dragEventFor.stop, this.handleDragStop);\n }\n });\n _defineProperty(this, \"onMouseDown\", e => {\n dragEventFor = eventsFor.mouse; // on touchscreen laptops we could switch back to mouse\n\n return this.handleDragStart(e);\n });\n _defineProperty(this, \"onMouseUp\", e => {\n dragEventFor = eventsFor.mouse;\n return this.handleDragStop(e);\n });\n // Same as onMouseDown (start drag), but now consider this a touch device.\n _defineProperty(this, \"onTouchStart\", e => {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return this.handleDragStart(e);\n });\n _defineProperty(this, \"onTouchEnd\", e => {\n // We're on a touch device now, so change the event handlers\n dragEventFor = eventsFor.touch;\n return this.handleDragStop(e);\n });\n }\n componentDidMount() {\n this.mounted = true;\n // Touch handlers must be added with {passive: false} to be cancelable.\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n const thisNode = this.findDOMNode();\n if (thisNode) {\n (0, _domFns.addEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n }\n }\n componentWillUnmount() {\n this.mounted = false;\n // Remove any leftover event handlers. Remove both touch and mouse handlers in case\n // some browser quirk caused a touch event to fire during a mouse move, or vice versa.\n const thisNode = this.findDOMNode();\n if (thisNode) {\n const {\n ownerDocument\n } = thisNode;\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.move, this.handleDrag);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.mouse.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(ownerDocument, eventsFor.touch.stop, this.handleDragStop);\n (0, _domFns.removeEvent)(thisNode, eventsFor.touch.start, this.onTouchStart, {\n passive: false\n });\n if (this.props.enableUserSelectHack) (0, _domFns.removeUserSelectStyles)(ownerDocument);\n }\n }\n\n // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find\n // the underlying DOM node ourselves. See the README for more information.\n findDOMNode() /*: ?HTMLElement*/{\n var _this$props, _this$props2;\n return (_this$props = this.props) !== null && _this$props !== void 0 && _this$props.nodeRef ? (_this$props2 = this.props) === null || _this$props2 === void 0 || (_this$props2 = _this$props2.nodeRef) === null || _this$props2 === void 0 ? void 0 : _this$props2.current : _reactDom.default.findDOMNode(this);\n }\n render() /*: React.Element*/{\n // Reuse the child provided\n // This makes it flexible to use whatever element is wanted (div, ul, etc)\n return /*#__PURE__*/React.cloneElement(React.Children.only(this.props.children), {\n // Note: mouseMove handler is attached to document so it will still function\n // when the user drags quickly and leaves the bounds of the element.\n onMouseDown: this.onMouseDown,\n onMouseUp: this.onMouseUp,\n // onTouchStart is added on `componentDidMount` so they can be added with\n // {passive: false}, which allows it to cancel. See\n // https://developers.google.com/web/updates/2017/01/scrolling-intervention\n onTouchEnd: this.onTouchEnd\n });\n }\n}\nexports.default = DraggableCore;\n_defineProperty(DraggableCore, \"displayName\", 'DraggableCore');\n_defineProperty(DraggableCore, \"propTypes\", {\n /**\n * `allowAnyClick` allows dragging using any mouse button.\n * By default, we only accept the left button.\n *\n * Defaults to `false`.\n */\n allowAnyClick: _propTypes.default.bool,\n children: _propTypes.default.node.isRequired,\n /**\n * `disabled`, if true, stops the from dragging. All handlers,\n * with the exception of `onMouseDown`, will not fire.\n */\n disabled: _propTypes.default.bool,\n /**\n * By default, we add 'user-select:none' attributes to the document body\n * to prevent ugly text selection during drag. If this is causing problems\n * for your app, set this to `false`.\n */\n enableUserSelectHack: _propTypes.default.bool,\n /**\n * `offsetParent`, if set, uses the passed DOM node to compute drag offsets\n * instead of using the parent node.\n */\n offsetParent: function (props /*: DraggableCoreProps*/, propName /*: $Keys*/) {\n if (props[propName] && props[propName].nodeType !== 1) {\n throw new Error('Draggable\\'s offsetParent must be a DOM Node.');\n }\n },\n /**\n * `grid` specifies the x and y that dragging should snap to.\n */\n grid: _propTypes.default.arrayOf(_propTypes.default.number),\n /**\n * `handle` specifies a selector to be used as the handle that initiates drag.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return (\n * \n *
\n *
Click me to drag
\n *
This is some other content
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n handle: _propTypes.default.string,\n /**\n * `cancel` specifies a selector to be used to prevent drag initialization.\n *\n * Example:\n *\n * ```jsx\n * let App = React.createClass({\n * render: function () {\n * return(\n * \n *
\n *
You can't drag from here
\n *
Dragging here works fine
\n *
\n *
\n * );\n * }\n * });\n * ```\n */\n cancel: _propTypes.default.string,\n /* If running in React Strict mode, ReactDOM.findDOMNode() is deprecated.\n * Unfortunately, in order for to work properly, we need raw access\n * to the underlying DOM node. If you want to avoid the warning, pass a `nodeRef`\n * as in this example:\n *\n * function MyComponent() {\n * const nodeRef = React.useRef(null);\n * return (\n * \n *
Example Target
\n *
\n * );\n * }\n *\n * This can be used for arbitrarily nested components, so long as the ref ends up\n * pointing to the actual child DOM node and not a custom component.\n */\n nodeRef: _propTypes.default.object,\n /**\n * Called when dragging starts.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onStart: _propTypes.default.func,\n /**\n * Called while dragging.\n * If this function returns the boolean false, dragging will be canceled.\n */\n onDrag: _propTypes.default.func,\n /**\n * Called when dragging stops.\n * If this function returns the boolean false, the drag will remain active.\n */\n onStop: _propTypes.default.func,\n /**\n * A workaround option which can be passed if onMouseDown needs to be accessed,\n * since it'll always be blocked (as there is internal use of onMouseDown)\n */\n onMouseDown: _propTypes.default.func,\n /**\n * `scale`, if set, applies scaling while dragging an element\n */\n scale: _propTypes.default.number,\n /**\n * These properties should be defined on the child, not here.\n */\n className: _shims.dontSetMe,\n style: _shims.dontSetMe,\n transform: _shims.dontSetMe\n});\n_defineProperty(DraggableCore, \"defaultProps\", {\n allowAnyClick: false,\n // by default only accept left click\n disabled: false,\n enableUserSelectHack: true,\n onStart: function () {},\n onDrag: function () {},\n onStop: function () {},\n onMouseDown: function () {},\n scale: 1\n});","\"use strict\";\n\nconst {\n default: Draggable,\n DraggableCore\n} = require('./Draggable');\n\n// Previous versions of this lib exported as the root export. As to no-// them, or TypeScript, we export *both* as the root and as 'default'.\n// See https://github.com/mzabriskie/react-draggable/pull/254\n// and https://github.com/mzabriskie/react-draggable/issues/266\nmodule.exports = Draggable;\nmodule.exports.default = Draggable;\nmodule.exports.DraggableCore = DraggableCore;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.addClassName = addClassName;\nexports.addEvent = addEvent;\nexports.addUserSelectStyles = addUserSelectStyles;\nexports.createCSSTransform = createCSSTransform;\nexports.createSVGTransform = createSVGTransform;\nexports.getTouch = getTouch;\nexports.getTouchIdentifier = getTouchIdentifier;\nexports.getTranslation = getTranslation;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.matchesSelector = matchesSelector;\nexports.matchesSelectorAndParentsTo = matchesSelectorAndParentsTo;\nexports.offsetXYFromParent = offsetXYFromParent;\nexports.outerHeight = outerHeight;\nexports.outerWidth = outerWidth;\nexports.removeClassName = removeClassName;\nexports.removeEvent = removeEvent;\nexports.removeUserSelectStyles = removeUserSelectStyles;\nvar _shims = require(\"./shims\");\nvar _getPrefix = _interopRequireWildcard(require(\"./getPrefix\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n/*:: import type {ControlPosition, PositionOffsetControlPosition, MouseTouchEvent} from './types';*/\nlet matchesSelectorFunc = '';\nfunction matchesSelector(el /*: Node*/, selector /*: string*/) /*: boolean*/{\n if (!matchesSelectorFunc) {\n matchesSelectorFunc = (0, _shims.findInArray)(['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'], function (method) {\n // $FlowIgnore: Doesn't think elements are indexable\n return (0, _shims.isFunction)(el[method]);\n });\n }\n\n // Might not be found entirely (not an Element?) - in that case, bail\n // $FlowIgnore: Doesn't think elements are indexable\n if (!(0, _shims.isFunction)(el[matchesSelectorFunc])) return false;\n\n // $FlowIgnore: Doesn't think elements are indexable\n return el[matchesSelectorFunc](selector);\n}\n\n// Works up the tree to the draggable itself attempting to match selector.\nfunction matchesSelectorAndParentsTo(el /*: Node*/, selector /*: string*/, baseNode /*: Node*/) /*: boolean*/{\n let node = el;\n do {\n if (matchesSelector(node, selector)) return true;\n if (node === baseNode) return false;\n // $FlowIgnore[incompatible-type]\n node = node.parentNode;\n } while (node);\n return false;\n}\nfunction addEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n if (!el) return;\n const options = {\n capture: true,\n ...inputOptions\n };\n // $FlowIgnore[method-unbinding]\n if (el.addEventListener) {\n el.addEventListener(event, handler, options);\n } else if (el.attachEvent) {\n el.attachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = handler;\n }\n}\nfunction removeEvent(el /*: ?Node*/, event /*: string*/, handler /*: Function*/, inputOptions /*: Object*/) /*: void*/{\n if (!el) return;\n const options = {\n capture: true,\n ...inputOptions\n };\n // $FlowIgnore[method-unbinding]\n if (el.removeEventListener) {\n el.removeEventListener(event, handler, options);\n } else if (el.detachEvent) {\n el.detachEvent('on' + event, handler);\n } else {\n // $FlowIgnore: Doesn't think elements are indexable\n el['on' + event] = null;\n }\n}\nfunction outerHeight(node /*: HTMLElement*/) /*: number*/{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetTop which is including margin. See getBoundPosition\n let height = node.clientHeight;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height += (0, _shims.int)(computedStyle.borderTopWidth);\n height += (0, _shims.int)(computedStyle.borderBottomWidth);\n return height;\n}\nfunction outerWidth(node /*: HTMLElement*/) /*: number*/{\n // This is deliberately excluding margin for our calculations, since we are using\n // offsetLeft which is including margin. See getBoundPosition\n let width = node.clientWidth;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width += (0, _shims.int)(computedStyle.borderLeftWidth);\n width += (0, _shims.int)(computedStyle.borderRightWidth);\n return width;\n}\nfunction innerHeight(node /*: HTMLElement*/) /*: number*/{\n let height = node.clientHeight;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n height -= (0, _shims.int)(computedStyle.paddingTop);\n height -= (0, _shims.int)(computedStyle.paddingBottom);\n return height;\n}\nfunction innerWidth(node /*: HTMLElement*/) /*: number*/{\n let width = node.clientWidth;\n const computedStyle = node.ownerDocument.defaultView.getComputedStyle(node);\n width -= (0, _shims.int)(computedStyle.paddingLeft);\n width -= (0, _shims.int)(computedStyle.paddingRight);\n return width;\n}\n/*:: interface EventWithOffset {\n clientX: number, clientY: number\n}*/\n// Get from offsetParent\nfunction offsetXYFromParent(evt /*: EventWithOffset*/, offsetParent /*: HTMLElement*/, scale /*: number*/) /*: ControlPosition*/{\n const isBody = offsetParent === offsetParent.ownerDocument.body;\n const offsetParentRect = isBody ? {\n left: 0,\n top: 0\n } : offsetParent.getBoundingClientRect();\n const x = (evt.clientX + offsetParent.scrollLeft - offsetParentRect.left) / scale;\n const y = (evt.clientY + offsetParent.scrollTop - offsetParentRect.top) / scale;\n return {\n x,\n y\n };\n}\nfunction createCSSTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: Object*/{\n const translation = getTranslation(controlPos, positionOffset, 'px');\n return {\n [(0, _getPrefix.browserPrefixToKey)('transform', _getPrefix.default)]: translation\n };\n}\nfunction createSVGTransform(controlPos /*: ControlPosition*/, positionOffset /*: PositionOffsetControlPosition*/) /*: string*/{\n const translation = getTranslation(controlPos, positionOffset, '');\n return translation;\n}\nfunction getTranslation(_ref /*:: */, positionOffset /*: PositionOffsetControlPosition*/, unitSuffix /*: string*/) /*: string*/{\n let {\n x,\n y\n } /*: ControlPosition*/ = _ref /*: ControlPosition*/;\n let translation = \"translate(\".concat(x).concat(unitSuffix, \",\").concat(y).concat(unitSuffix, \")\");\n if (positionOffset) {\n const defaultX = \"\".concat(typeof positionOffset.x === 'string' ? positionOffset.x : positionOffset.x + unitSuffix);\n const defaultY = \"\".concat(typeof positionOffset.y === 'string' ? positionOffset.y : positionOffset.y + unitSuffix);\n translation = \"translate(\".concat(defaultX, \", \").concat(defaultY, \")\") + translation;\n }\n return translation;\n}\nfunction getTouch(e /*: MouseTouchEvent*/, identifier /*: number*/) /*: ?{clientX: number, clientY: number}*/{\n return e.targetTouches && (0, _shims.findInArray)(e.targetTouches, t => identifier === t.identifier) || e.changedTouches && (0, _shims.findInArray)(e.changedTouches, t => identifier === t.identifier);\n}\nfunction getTouchIdentifier(e /*: MouseTouchEvent*/) /*: ?number*/{\n if (e.targetTouches && e.targetTouches[0]) return e.targetTouches[0].identifier;\n if (e.changedTouches && e.changedTouches[0]) return e.changedTouches[0].identifier;\n}\n\n// User-select Hacks:\n//\n// Useful for preventing blue highlights all over everything when dragging.\n\n// Note we're passing `document` b/c we could be iframed\nfunction addUserSelectStyles(doc /*: ?Document*/) {\n if (!doc) return;\n let styleEl = doc.getElementById('react-draggable-style-el');\n if (!styleEl) {\n styleEl = doc.createElement('style');\n styleEl.type = 'text/css';\n styleEl.id = 'react-draggable-style-el';\n styleEl.innerHTML = '.react-draggable-transparent-selection *::-moz-selection {all: inherit;}\\n';\n styleEl.innerHTML += '.react-draggable-transparent-selection *::selection {all: inherit;}\\n';\n doc.getElementsByTagName('head')[0].appendChild(styleEl);\n }\n if (doc.body) addClassName(doc.body, 'react-draggable-transparent-selection');\n}\nfunction removeUserSelectStyles(doc /*: ?Document*/) {\n if (!doc) return;\n try {\n if (doc.body) removeClassName(doc.body, 'react-draggable-transparent-selection');\n // $FlowIgnore: IE\n if (doc.selection) {\n // $FlowIgnore: IE\n doc.selection.empty();\n } else {\n // Remove selection caused by scroll, unless it's a focused input\n // (we use doc.defaultView in case we're in an iframe)\n const selection = (doc.defaultView || window).getSelection();\n if (selection && selection.type !== 'Caret') {\n selection.removeAllRanges();\n }\n }\n } catch (e) {\n // probably IE\n }\n}\nfunction addClassName(el /*: HTMLElement*/, className /*: string*/) {\n if (el.classList) {\n el.classList.add(className);\n } else {\n if (!el.className.match(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\")))) {\n el.className += \" \".concat(className);\n }\n }\n}\nfunction removeClassName(el /*: HTMLElement*/, className /*: string*/) {\n if (el.classList) {\n el.classList.remove(className);\n } else {\n el.className = el.className.replace(new RegExp(\"(?:^|\\\\s)\".concat(className, \"(?!\\\\S)\"), 'g'), '');\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.browserPrefixToKey = browserPrefixToKey;\nexports.browserPrefixToStyle = browserPrefixToStyle;\nexports.default = void 0;\nexports.getPrefix = getPrefix;\nconst prefixes = ['Moz', 'Webkit', 'O', 'ms'];\nfunction getPrefix() /*: string*/{\n var _window$document;\n let prop /*: string*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n // Ensure we're running in an environment where there is actually a global\n // `window` obj\n if (typeof window === 'undefined') return '';\n\n // If we're in a pseudo-browser server-side environment, this access\n // path may not exist, so bail out if it doesn't.\n const style = (_window$document = window.document) === null || _window$document === void 0 || (_window$document = _window$document.documentElement) === null || _window$document === void 0 ? void 0 : _window$document.style;\n if (!style) return '';\n if (prop in style) return '';\n for (let i = 0; i < prefixes.length; i++) {\n if (browserPrefixToKey(prop, prefixes[i]) in style) return prefixes[i];\n }\n return '';\n}\nfunction browserPrefixToKey(prop /*: string*/, prefix /*: string*/) /*: string*/{\n return prefix ? \"\".concat(prefix).concat(kebabToTitleCase(prop)) : prop;\n}\nfunction browserPrefixToStyle(prop /*: string*/, prefix /*: string*/) /*: string*/{\n return prefix ? \"-\".concat(prefix.toLowerCase(), \"-\").concat(prop) : prop;\n}\nfunction kebabToTitleCase(str /*: string*/) /*: string*/{\n let out = '';\n let shouldCapitalize = true;\n for (let i = 0; i < str.length; i++) {\n if (shouldCapitalize) {\n out += str[i].toUpperCase();\n shouldCapitalize = false;\n } else if (str[i] === '-') {\n shouldCapitalize = true;\n } else {\n out += str[i];\n }\n }\n return out;\n}\n\n// Default export is the prefix itself, like 'Moz', 'Webkit', etc\n// Note that you may have to re-test for certain things; for instance, Chrome 50\n// can handle unprefixed `transform`, but not unprefixed `user-select`\nvar _default = exports.default = (getPrefix() /*: string*/);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = log;\n/*eslint no-console:0*/\nfunction log() {\n if (undefined) console.log(...arguments);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canDragX = canDragX;\nexports.canDragY = canDragY;\nexports.createCoreData = createCoreData;\nexports.createDraggableData = createDraggableData;\nexports.getBoundPosition = getBoundPosition;\nexports.getControlPosition = getControlPosition;\nexports.snapToGrid = snapToGrid;\nvar _shims = require(\"./shims\");\nvar _domFns = require(\"./domFns\");\n/*:: import type Draggable from '../Draggable';*/\n/*:: import type {Bounds, ControlPosition, DraggableData, MouseTouchEvent} from './types';*/\n/*:: import type DraggableCore from '../DraggableCore';*/\nfunction getBoundPosition(draggable /*: Draggable*/, x /*: number*/, y /*: number*/) /*: [number, number]*/{\n // If no bounds, short-circuit and move on\n if (!draggable.props.bounds) return [x, y];\n\n // Clone new bounds\n let {\n bounds\n } = draggable.props;\n bounds = typeof bounds === 'string' ? bounds : cloneBounds(bounds);\n const node = findDOMNode(draggable);\n if (typeof bounds === 'string') {\n const {\n ownerDocument\n } = node;\n const ownerWindow = ownerDocument.defaultView;\n let boundNode;\n if (bounds === 'parent') {\n boundNode = node.parentNode;\n } else {\n boundNode = ownerDocument.querySelector(bounds);\n }\n if (!(boundNode instanceof ownerWindow.HTMLElement)) {\n throw new Error('Bounds selector \"' + bounds + '\" could not find an element.');\n }\n const boundNodeEl /*: HTMLElement*/ = boundNode; // for Flow, can't seem to refine correctly\n const nodeStyle = ownerWindow.getComputedStyle(node);\n const boundNodeStyle = ownerWindow.getComputedStyle(boundNodeEl);\n // Compute bounds. This is a pain with padding and offsets but this gets it exactly right.\n bounds = {\n left: -node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingLeft) + (0, _shims.int)(nodeStyle.marginLeft),\n top: -node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingTop) + (0, _shims.int)(nodeStyle.marginTop),\n right: (0, _domFns.innerWidth)(boundNodeEl) - (0, _domFns.outerWidth)(node) - node.offsetLeft + (0, _shims.int)(boundNodeStyle.paddingRight) - (0, _shims.int)(nodeStyle.marginRight),\n bottom: (0, _domFns.innerHeight)(boundNodeEl) - (0, _domFns.outerHeight)(node) - node.offsetTop + (0, _shims.int)(boundNodeStyle.paddingBottom) - (0, _shims.int)(nodeStyle.marginBottom)\n };\n }\n\n // Keep x and y below right and bottom limits...\n if ((0, _shims.isNum)(bounds.right)) x = Math.min(x, bounds.right);\n if ((0, _shims.isNum)(bounds.bottom)) y = Math.min(y, bounds.bottom);\n\n // But above left and top limits.\n if ((0, _shims.isNum)(bounds.left)) x = Math.max(x, bounds.left);\n if ((0, _shims.isNum)(bounds.top)) y = Math.max(y, bounds.top);\n return [x, y];\n}\nfunction snapToGrid(grid /*: [number, number]*/, pendingX /*: number*/, pendingY /*: number*/) /*: [number, number]*/{\n const x = Math.round(pendingX / grid[0]) * grid[0];\n const y = Math.round(pendingY / grid[1]) * grid[1];\n return [x, y];\n}\nfunction canDragX(draggable /*: Draggable*/) /*: boolean*/{\n return draggable.props.axis === 'both' || draggable.props.axis === 'x';\n}\nfunction canDragY(draggable /*: Draggable*/) /*: boolean*/{\n return draggable.props.axis === 'both' || draggable.props.axis === 'y';\n}\n\n// Get {x, y} positions from event.\nfunction getControlPosition(e /*: MouseTouchEvent*/, touchIdentifier /*: ?number*/, draggableCore /*: DraggableCore*/) /*: ?ControlPosition*/{\n const touchObj = typeof touchIdentifier === 'number' ? (0, _domFns.getTouch)(e, touchIdentifier) : null;\n if (typeof touchIdentifier === 'number' && !touchObj) return null; // not the right touch\n const node = findDOMNode(draggableCore);\n // User can provide an offsetParent if desired.\n const offsetParent = draggableCore.props.offsetParent || node.offsetParent || node.ownerDocument.body;\n return (0, _domFns.offsetXYFromParent)(touchObj || e, offsetParent, draggableCore.props.scale);\n}\n\n// Create an data object exposed by 's events\nfunction createCoreData(draggable /*: DraggableCore*/, x /*: number*/, y /*: number*/) /*: DraggableData*/{\n const isStart = !(0, _shims.isNum)(draggable.lastX);\n const node = findDOMNode(draggable);\n if (isStart) {\n // If this is our first move, use the x and y as last coords.\n return {\n node,\n deltaX: 0,\n deltaY: 0,\n lastX: x,\n lastY: y,\n x,\n y\n };\n } else {\n // Otherwise calculate proper values.\n return {\n node,\n deltaX: x - draggable.lastX,\n deltaY: y - draggable.lastY,\n lastX: draggable.lastX,\n lastY: draggable.lastY,\n x,\n y\n };\n }\n}\n\n// Create an data exposed by 's events\nfunction createDraggableData(draggable /*: Draggable*/, coreData /*: DraggableData*/) /*: DraggableData*/{\n const scale = draggable.props.scale;\n return {\n node: coreData.node,\n x: draggable.state.x + coreData.deltaX / scale,\n y: draggable.state.y + coreData.deltaY / scale,\n deltaX: coreData.deltaX / scale,\n deltaY: coreData.deltaY / scale,\n lastX: draggable.state.x,\n lastY: draggable.state.y\n };\n}\n\n// A lot faster than stringify/parse\nfunction cloneBounds(bounds /*: Bounds*/) /*: Bounds*/{\n return {\n left: bounds.left,\n top: bounds.top,\n right: bounds.right,\n bottom: bounds.bottom\n };\n}\nfunction findDOMNode(draggable /*: Draggable | DraggableCore*/) /*: HTMLElement*/{\n const node = draggable.findDOMNode();\n if (!node) {\n throw new Error(': Unmounted during event!');\n }\n // $FlowIgnore we can't assert on HTMLElement due to tests... FIXME\n return node;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.dontSetMe = dontSetMe;\nexports.findInArray = findInArray;\nexports.int = int;\nexports.isFunction = isFunction;\nexports.isNum = isNum;\n// @credits https://gist.github.com/rogozhnikoff/a43cfed27c41e4e68cdc\nfunction findInArray(array /*: Array | TouchList*/, callback /*: Function*/) /*: any*/{\n for (let i = 0, length = array.length; i < length; i++) {\n if (callback.apply(callback, [array[i], i, array])) return array[i];\n }\n}\nfunction isFunction(func /*: any*/) /*: boolean %checks*/{\n // $FlowIgnore[method-unbinding]\n return typeof func === 'function' || Object.prototype.toString.call(func) === '[object Function]';\n}\nfunction isNum(num /*: any*/) /*: boolean %checks*/{\n return typeof num === 'number' && !isNaN(num);\n}\nfunction int(a /*: string*/) /*: number*/{\n return parseInt(a, 10);\n}\nfunction dontSetMe(props /*: Object*/, propName /*: string*/, componentName /*: string*/) /*: ?Error*/{\n if (props[propName]) {\n return new Error(\"Invalid prop \".concat(propName, \" passed to \").concat(componentName, \" - do not set this, set it on the child.\"));\n }\n}","/**\n * @license React\n * react-reconciler-constants.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';exports.ConcurrentRoot=1;exports.ContinuousEventPriority=4;exports.DefaultEventPriority=16;exports.DiscreteEventPriority=1;exports.IdleEventPriority=536870912;exports.LegacyRoot=0;\n","/**\n * @license React\n * react-reconciler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nmodule.exports = function $$$reconciler($$$hostConfig) {\n var exports = {};\n'use strict';var aa=require(\"react\"),ba=require(\"scheduler\"),ca=Object.assign;function n(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;ch||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{bc=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?ac(a):\"\"}var dc=Object.prototype.hasOwnProperty,ec=[],fc=-1;function gc(a){return{current:a}}\nfunction x(a){0>fc||(a.current=ec[fc],ec[fc]=null,fc--)}function y(a,b){fc++;ec[fc]=a.current;a.current=b}var hc={},A=gc(hc),B=gc(!1),ic=hc;function jc(a,b){var c=a.type.contextTypes;if(!c)return hc;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction C(a){a=a.childContextTypes;return null!==a&&void 0!==a}function kc(){x(B);x(A)}function lc(a,b,c){if(A.current!==hc)throw Error(n(168));y(A,b);y(B,c)}function mc(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(n(108,xa(a)||\"Unknown\",e));return ca({},c,d)}\nfunction nc(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||hc;ic=A.current;y(A,a);y(B,B.current);return!0}function oc(a,b,c){var d=a.stateNode;if(!d)throw Error(n(169));c?(a=mc(a,b,ic),d.__reactInternalMemoizedMergedChildContext=a,x(B),x(A),y(A,a)):x(B);y(B,c)}var qc=Math.clz32?Math.clz32:pc,rc=Math.log,sc=Math.LN2;function pc(a){a>>>=0;return 0===a?32:31-(rc(a)/sc|0)|0}var tc=64,uc=4194304;\nfunction vc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function wc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=vc(h):(f&=g,0!==f&&(d=vc(f)))}else g=c&~e,0!==g?d=vc(g):0!==f&&(d=vc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}function Bc(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-qc(b);a[b]=c}\nfunction Cc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0>=g;e-=g;Nd=1<<32-qc(b)+e|c<u?(t=w,w=null):t=w.sibling;var q=r(e,w,h[u],k);if(null===q){null===w&&(w=t);break}a&&w&&null===q.alternate&&b(e,w);g=f(q,g,u);null===m?l=q:m.sibling=q;m=q;w=t}if(u===h.length)return c(e,w),I&&Pd(e,u),l;if(null===w){for(;uu?(q=m,m=null):q=m.sibling;var V=r(e,m,t.value,k);if(null===V){null===m&&(m=q);break}a&&m&&null===V.alternate&&b(e,m);g=f(V,g,u);null===w?l=V:w.sibling=V;w=V;m=q}if(t.done)return c(e,\nm),I&&Pd(e,u),l;if(null===m){for(;!t.done;u++,t=h.next())t=v(e,t.value,k),null!==t&&(g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);I&&Pd(e,u);return l}for(m=d(e,m);!t.done;u++,t=h.next())t=z(m,e,u,t.value,k),null!==t&&(a&&null!==t.alternate&&m.delete(null===t.key?u:t.key),g=f(t,g,u),null===w?l=t:w.sibling=t,w=t);a&&m.forEach(function(a){return b(e,a)});I&&Pd(e,u);return l}function da(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ia&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==\nf){switch(f.$$typeof){case fa:a:{for(var k=f.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ia){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===ra&&he(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=fe(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ia?(d=ne(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=le(f.type,f.key,f.props,null,a.mode,h),h.ref=fe(a,d,f),h.return=\na,a=h)}return g(a);case ha:a:{for(l=f.key;null!==d;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=me(f,a.mode,h);d.return=a;a=d}return g(a);case ra:return l=f._init,da(a,d,l(f._payload),h)}if(Ea(f))return q(a,d,f,h);if(ua(f))return N(a,d,f,h);ge(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&\n6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=ke(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return da}var oe=ie(!0),pe=ie(!1),qe={},re=gc(qe),se=gc(qe),te=gc(qe);function ue(a){if(a===qe)throw Error(n(174));return a}function ve(a,b){y(te,b);y(se,a);y(re,qe);a=Ga(b);x(re);y(re,a)}function we(){x(re);x(se);x(te)}function xe(a){var b=ue(te.current),c=ue(re.current);b=Ha(c,a.type,b);c!==b&&(y(se,a),y(re,b))}function ye(a){se.current===a&&(x(re),x(se))}var J=gc(0);\nfunction ze(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||Ib(c)||Jb(c)))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Ae=[];\nfunction Be(){for(var a=0;ac?c:4;a(!0);var d=De.transition;De.transition={};try{a(!1),b()}finally{D=c,De.transition=d}}function rf(){return Re().memoizedState}function sf(a,b,c){var d=zd(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};tf(a)?uf(b,c):(vf(a,b,c),c=H(),a=Ad(a,d,c),null!==a&&wf(a,b,d))}\nfunction df(a,b,c){var d=zd(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(tf(a))uf(b,e);else{vf(a,b,e);var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(Rc(h,g))return}catch(k){}finally{}c=H();a=Ad(a,d,c);null!==a&&wf(a,b,d)}}function tf(a){var b=a.alternate;return a===K||null!==b&&b===K}\nfunction uf(a,b){Ge=Fe=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function vf(a,b,c){null!==F&&0!==(a.mode&1)&&0===(G&2)?(a=b.interleaved,null===a?(c.next=c,null===md?md=[b]:md.push(b)):(c.next=a.next,a.next=c),b.interleaved=c):(a=b.pending,null===a?c.next=c:(c.next=a.next,a.next=c),b.pending=c)}function wf(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Dc(a,c)}}\nvar Oe={readContext:ld,useCallback:O,useContext:O,useEffect:O,useImperativeHandle:O,useInsertionEffect:O,useLayoutEffect:O,useMemo:O,useReducer:O,useRef:O,useState:O,useDebugValue:O,useDeferredValue:O,useTransition:O,useMutableSource:O,useSyncExternalStore:O,useId:O,unstable_isNewReconciler:!1},Le={readContext:ld,useCallback:function(a,b){Qe().memoizedState=[a,void 0===b?null:b];return a},useContext:ld,useEffect:hf,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ff(4194308,\n4,lf.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ff(4194308,4,a,b)},useInsertionEffect:function(a,b){return ff(4,2,a,b)},useMemo:function(a,b){var c=Qe();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Qe();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=sf.bind(null,K,a);return[d.memoizedState,a]},useRef:function(a){var b=\nQe();a={current:a};return b.memoizedState=a},useState:cf,useDebugValue:nf,useDeferredValue:function(a){var b=cf(a),c=b[0],d=b[1];hf(function(){var b=De.transition;De.transition={};try{d(a)}finally{De.transition=b}},[a]);return c},useTransition:function(){var a=cf(!1),b=a[0];a=qf.bind(null,a[1]);Qe().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=K,e=Qe();if(I){if(void 0===c)throw Error(n(407));c=c()}else{c=b();if(null===F)throw Error(n(349));\n0!==(Ee&30)||af(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;hf(Ye.bind(null,d,f,a),[a]);d.flags|=2048;Ze(9,$e.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Qe(),b=F.identifierPrefix;if(I){var c=Od;var d=Nd;c=(d&~(1<<32-qc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=He++;0Uf&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304)}else{if(!d)if(a=ze(f),null!==a){if(b.flags|=128,d=!0,a=a.updateQueue,null!==a&&(b.updateQueue=a,b.flags|=4),Qf(e,!0),null===e.tail&&\"hidden\"===e.tailMode&&!f.alternate&&!I)return P(b),null}else 2*E()-e.renderingStartTime>Uf&&1073741824!==c&&(b.flags|=128,d=!0,Qf(e,!1),b.lanes=4194304);e.isBackwards?(f.sibling=b.child,b.child=f):(a=e.last,null!==a?a.sibling=f:b.child=f,e.last=f)}if(null!==\ne.tail)return b=e.tail,e.rendering=b,e.tail=b.sibling,e.renderingStartTime=E(),b.sibling=null,a=J.current,y(J,d?a&1|2:a&1),b;P(b);return null;case 22:case 23:return Vf(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(Wf&1073741824)&&(P(b),Ua&&b.subtreeFlags&6&&(b.flags|=8192)):P(b),null;case 24:return null;case 25:return null}throw Error(n(156,b.tag));}var Xf=ea.ReactCurrentOwner,kd=!1;\nfunction R(a,b,c,d){b.child=null===a?pe(b,null,c,d):oe(b,a.child,c,d)}function Yf(a,b,c,d,e){c=c.render;var f=b.ref;jd(b,e);d=Ke(a,b,c,d,f,e);c=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&c&&Rd(b);b.flags|=1;R(a,b,d,e);return b.child}\nfunction $f(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!ag(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bg(a,b,f,d,e);a=le(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Zc;if(c(g,d)&&a.ref===b.ref)return Zf(a,b,e)}b.flags|=1;a=je(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bg(a,b,c,d,e){if(null!==a&&Zc(a.memoizedProps,d)&&a.ref===b.ref)if(kd=!1,0!==(a.lanes&e))0!==(a.flags&131072)&&(kd=!0);else return b.lanes=a.lanes,Zf(a,b,e);return cg(a,b,c,d,e)}\nfunction dg(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null},y(eg,Wf),Wf|=c;else if(0!==(c&1073741824))b.memoizedState={baseLanes:0,cachePool:null},d=null!==f?f.baseLanes:c,y(eg,Wf),Wf|=d;else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null},b.updateQueue=null,y(eg,Wf),Wf|=a,null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):\nd=c,y(eg,Wf),Wf|=d;R(a,b,e,c);return b.child}function fg(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cg(a,b,c,d,e){var f=C(c)?ic:A.current;f=jc(b,f);jd(b,e);c=Ke(a,b,c,d,f,e);d=Pe();if(null!==a&&!kd)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zf(a,b,e);I&&d&&Rd(b);b.flags|=1;R(a,b,c,e);return b.child}\nfunction gg(a,b,c,d,e){if(C(c)){var f=!0;nc(b)}else f=!1;jd(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Dd(b,c,d),Fd(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=ld(l):(l=C(c)?ic:A.current,l=jc(b,l));var m=c.getDerivedStateFromProps,v=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;v||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==\ntypeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ed(b,g,d,l);nd=!1;var r=b.memoizedState;g.state=r;ud(b,d,g,e);k=b.memoizedState;h!==d||r!==k||B.current||nd?(\"function\"===typeof m&&(yd(b,c,m,d),k=b.memoizedState),(h=nd||Cd(b,c,h,d,r,k,l))?(v||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&\n(b.flags|=4194308)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;pd(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:ad(b.type,h);g.props=l;v=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=ld(k):(k=C(c)?ic:A.current,k=jc(b,k));var z=c.getDerivedStateFromProps;(m=\"function\"===typeof z||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==v||r!==k)&&Ed(b,g,d,k);nd=!1;r=b.memoizedState;g.state=r;ud(b,d,g,e);var q=b.memoizedState;h!==v||r!==q||B.current||nd?(\"function\"===typeof z&&(yd(b,c,z,d),q=b.memoizedState),(l=nd||Cd(b,c,l,d,r,q,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nq,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,q,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=q),g.props=d,g.state=q,g.context=k,d=l):(\"function\"!==\ntypeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return hg(a,b,c,d,f,e)}\nfunction hg(a,b,c,d,e,f){fg(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&oc(b,c,!1),Zf(a,b,f);d=b.stateNode;Xf.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=oe(b,a.child,null,f),b.child=oe(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&oc(b,c,!0);return b.child}function ig(a){var b=a.stateNode;b.pendingContext?lc(a,b.pendingContext,b.pendingContext!==b.context):b.context&&lc(a,b.context,!1);ve(a,b.containerInfo)}\nfunction jg(a,b,c,d,e){de();ee(e);b.flags|=256;R(a,b,c,d);return b.child}var kg={dehydrated:null,treeContext:null,retryLane:0};function lg(a){return{baseLanes:a,cachePool:null}}\nfunction mg(a,b,c){var d=b.pendingProps,e=J.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;y(J,e&1);if(null===a){ae(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:Jb(a)?b.lanes=8:b.lanes=1073741824,null;e=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,e={mode:\"hidden\",children:e},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=e):\nf=ng(e,d,0,null),a=ne(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=lg(c),b.memoizedState=kg,a):og(b,e)}e=a.memoizedState;if(null!==e){h=e.dehydrated;if(null!==h){if(g){if(b.flags&256)return b.flags&=-257,pg(a,b,c,Error(n(422)));if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=ng({mode:\"visible\",children:d.children},e,0,null);f=ne(f,e,c,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&oe(b,a.child,\nnull,c);b.child.memoizedState=lg(c);b.memoizedState=kg;return f}if(0===(b.mode&1))b=pg(a,b,c,null);else if(Jb(h))b=pg(a,b,c,Error(n(419)));else if(d=0!==(c&a.childLanes),kd||d){d=F;if(null!==d){switch(c&-c){case 4:f=2;break;case 16:f=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:f=32;break;case 536870912:f=\n268435456;break;default:f=0}d=0!==(f&(d.suspendedLanes|c))?0:f;0!==d&&d!==e.retryLane&&(e.retryLane=d,Ad(a,d,-1))}Tf();b=pg(a,b,c,Error(n(421)))}else Ib(h)?(b.flags|=128,b.child=a.child,b=qg.bind(null,a),Kb(h,b),b=null):(c=e.treeContext,p&&(Ud=Ob(h),Td=b,I=!0,Wd=null,Vd=!1,null!==c&&(Kd[Ld++]=Nd,Kd[Ld++]=Od,Kd[Ld++]=Md,Nd=c.id,Od=c.overflow,Md=b)),b=og(b,b.pendingProps.children),b.flags|=4096);return b}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=\nnull===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=rg(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?lg(c):{baseLanes:e.baseLanes|c,cachePool:null},f.childLanes=a.childLanes&~c,b.memoizedState=kg,d;c=sg(a,b,d.children,c);b.memoizedState=null;return c}\nfunction og(a,b){b=ng({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sg(a,b,c,d){var e=a.child;a=e.sibling;c=je(e,{mode:\"visible\",children:c});0===(b.mode&1)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(d=b.deletions,null===d?(b.deletions=[a],b.flags|=16):d.push(a));return b.child=c}\nfunction rg(a,b,c,d,e){var f=b.mode;a=a.child;var g=a.sibling,h={mode:\"hidden\",children:c};0===(f&1)&&b.child!==a?(c=b.child,c.childLanes=0,c.pendingProps=h,b.deletions=null):(c=je(a,h),c.subtreeFlags=a.subtreeFlags&14680064);null!==g?d=je(g,d):(d=ne(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function pg(a,b,c,d){null!==d&&ee(d);oe(b,a.child,null,c);a=og(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction tg(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);id(a.return,b,c)}function ug(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction vg(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=J.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&tg(a,c,b);else if(19===a.tag)tg(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}y(J,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ze(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);ug(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ze(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}ug(b,!0,c,null,f);break;case \"together\":ug(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction Zf(a,b,c){null!==a&&(b.dependencies=a.dependencies);vd|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(n(153));if(null!==b.child){a=b.child;c=je(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=je(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction wg(a,b,c){switch(b.tag){case 3:ig(b);de();break;case 5:xe(b);break;case 1:C(b.type)&&nc(b);break;case 4:ve(b,b.stateNode.containerInfo);break;case 10:gd(b,b.type._context,b.memoizedProps.value);break;case 13:var d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return y(J,J.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return mg(a,b,c);y(J,J.current&1);a=Zf(a,b,c);return null!==a?a.sibling:null}y(J,J.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&128)){if(d)return vg(a,\nb,c);b.flags|=128}var e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);y(J,J.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dg(a,b,c)}return Zf(a,b,c)}\nfunction xg(a,b){Sd(b);switch(b.tag){case 1:return C(b.type)&&kc(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return we(),x(B),x(A),Be(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return ye(b),null;case 13:x(J);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(n(340));de()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return x(J),null;case 4:return we(),null;case 10:return hd(b.type._context),null;case 22:case 23:return Vf(),\nnull;case 24:return null;default:return null}}var yg=!1,zg=!1,Ag=\"function\"===typeof WeakSet?WeakSet:Set,S=null;function Bg(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){T(a,b,d)}else c.current=null}function Cg(a,b,c){try{c()}catch(d){T(a,b,d)}}var Dg=!1;\nfunction Eg(a,b){Ia(a.containerInfo);for(S=b;null!==S;)if(a=S,b=a.child,0!==(a.subtreeFlags&1028)&&null!==b)b.return=a,S=b;else for(;null!==S;){a=S;try{var c=a.alternate;if(0!==(a.flags&1024))switch(a.tag){case 0:case 11:case 15:break;case 1:if(null!==c){var d=c.memoizedProps,e=c.memoizedState,f=a.stateNode,g=f.getSnapshotBeforeUpdate(a.elementType===a.type?d:ad(a.type,d),e);f.__reactInternalSnapshotBeforeUpdate=g}break;case 3:Ua&&xb(a.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;\ndefault:throw Error(n(163));}}catch(h){T(a,a.return,h)}b=a.sibling;if(null!==b){b.return=a.return;S=b;break}S=a.return}c=Dg;Dg=!1;return c}function Fg(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Cg(b,c,f)}e=e.next}while(e!==d)}}function Gg(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Hg(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=Fa(c);break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Ig(a,b,c){if(Oc&&\"function\"===typeof Oc.onCommitFiberUnmount)try{Oc.onCommitFiberUnmount(Nc,b)}catch(g){}switch(b.tag){case 0:case 11:case 14:case 15:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a=a.next;do{var e=d,f=e.destroy;e=e.tag;void 0!==f&&(0!==(e&2)?Cg(b,c,f):0!==(e&4)&&Cg(b,c,f));d=d.next}while(d!==a)}break;case 1:Bg(b,c);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(g){T(b,\nc,g)}break;case 5:Bg(b,c);break;case 4:Ua?Jg(a,b,c):Va&&Va&&(b=b.stateNode.containerInfo,c=zb(b),Cb(b,c))}}function Kg(a,b,c){for(var d=b;;)if(Ig(a,d,c),null===d.child||Ua&&4===d.tag){if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return}d.sibling.return=d.return;d=d.sibling}else d.child.return=d,d=d.child}\nfunction Lg(a){var b=a.alternate;null!==b&&(a.alternate=null,Lg(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&Za(b));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Mg(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Ng(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Mg(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Og(a){if(Ua){a:{for(var b=a.return;null!==b;){if(Mg(b))break a;b=b.return}throw Error(n(160));}var c=b;switch(c.tag){case 5:b=c.stateNode;c.flags&32&&(sb(b),c.flags&=-33);c=Ng(a);Pg(a,c,b);break;case 3:case 4:b=c.stateNode.containerInfo;c=Ng(a);Qg(a,c,b);break;default:throw Error(n(161));}}}function Qg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?pb(c,a,b):kb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Qg(a,b,c),a=a.sibling;null!==a;)Qg(a,b,c),a=a.sibling}\nfunction Pg(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?ob(c,a,b):jb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Pg(a,b,c),a=a.sibling;null!==a;)Pg(a,b,c),a=a.sibling}\nfunction Jg(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(n(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag)Kg(a,d,c),g?rb(f,d.stateNode):qb(f,d.stateNode);else if(18===d.tag)g?Wb(f,d.stateNode):Vb(f,d.stateNode);else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ig(a,d,c),null!==\nd.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Rg(a,b){if(Ua){switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&nb(c,f,e,a,d,b)}return;case 6:if(null===b.stateNode)throw Error(n(162));c=b.memoizedProps;lb(b.stateNode,null!==a?a.memoizedProps:c,c);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);return;\ncase 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 17:return}throw Error(n(163));}switch(b.tag){case 0:case 11:case 14:case 15:Fg(3,b,b.return);Gg(3,b);Fg(5,b,b.return);return;case 12:return;case 13:Sg(b);return;case 19:Sg(b);return;case 3:p&&null!==a&&a.memoizedState.isDehydrated&&Tb(b.stateNode.containerInfo);break;case 22:case 23:return}a:if(Va){switch(b.tag){case 1:case 5:case 6:break a;case 3:case 4:b=b.stateNode;Cb(b.containerInfo,b.pendingChildren);break a}throw Error(n(163));}}\nfunction Sg(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ag);b.forEach(function(b){var d=Tg.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction Ug(a,b){for(S=b;null!==S;){b=S;var c=b.deletions;if(null!==c)for(var d=0;d\";case bh:return\":has(\"+(ih(a)||\"\")+\")\";case ch:return'[role=\"'+a.value+'\"]';case eh:return'\"'+a.value+'\"';case dh:return'[data-testname=\"'+a.value+'\"]';default:throw Error(n(365));}}\nfunction jh(a,b){var c=[];a=[a,0];for(var d=0;de&&(e=g);d&=~f}d=e;d=E()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lh(d/1960))-d;if(10a?16:a;if(null===uh)var d=!1;else{a=uh;uh=null;vh=0;if(0!==(G&6))throw Error(n(331));var e=G;G|=4;for(S=a.current;null!==S;){var f=S,g=f.child;if(0!==(S.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kE()-Vg?Ih(a,0):qh|=c);Z(a,b)}function Vh(a,b){0===b&&(0===(a.mode&1)?b=1:(b=uc,uc<<=1,0===(uc&130023424)&&(uc=4194304)));var c=H();a=Ah(a,b);null!==a&&(Bc(a,b,c),Z(a,c))}function qg(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Vh(a,c)}\nfunction Tg(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(n(314));}null!==d&&d.delete(b);Vh(a,c)}var Sh;\nSh=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||B.current)kd=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return kd=!1,wg(a,b,c);kd=0!==(a.flags&131072)?!0:!1}else kd=!1,I&&0!==(b.flags&1048576)&&Qd(b,Jd,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;var e=jc(b,A.current);jd(b,c);e=Ke(null,b,d,a,e,c);var f=Pe();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?\n(b.tag=1,b.memoizedState=null,b.updateQueue=null,C(d)?(f=!0,nc(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,od(b),e.updater=Bd,b.stateNode=e,e._reactInternals=b,Fd(b,d,a,c),b=hg(null,b,d,!0,f,c)):(b.tag=0,I&&f&&Rd(b),R(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Wh(d);a=ad(d,a);switch(e){case 0:b=cg(null,b,d,a,c);break a;case 1:b=gg(null,b,d,\na,c);break a;case 11:b=Yf(null,b,d,a,c);break a;case 14:b=$f(null,b,d,ad(d.type,a),c);break a}throw Error(n(306,d,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),cg(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),gg(a,b,d,e,c);case 3:a:{ig(b);if(null===a)throw Error(n(387));d=b.pendingProps;f=b.memoizedState;e=f.element;pd(a,b);ud(b,d,null,c);var g=b.memoizedState;d=g.element;if(p&&f.isDehydrated)if(f={element:d,isDehydrated:!1,\ncache:g.cache,transitions:g.transitions},b.updateQueue.baseState=f,b.memoizedState=f,b.flags&256){e=Error(n(423));b=jg(a,b,d,c,e);break a}else if(d!==e){e=Error(n(424));b=jg(a,b,d,c,e);break a}else for(p&&(Ud=Nb(b.stateNode.containerInfo),Td=b,I=!0,Wd=null,Vd=!1),c=pe(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{de();if(d===e){b=Zf(a,b,c);break a}R(a,b,d,c)}b=b.child}return b;case 5:return xe(b),null===a&&ae(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,\nOa(d,e)?g=null:null!==f&&Oa(d,f)&&(b.flags|=32),fg(a,b),R(a,b,g,c),b.child;case 6:return null===a&&ae(b),null;case 13:return mg(a,b,c);case 4:return ve(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=oe(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),Yf(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,b,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=\nb.type._context;e=b.pendingProps;f=b.memoizedProps;g=e.value;gd(b,d,g);if(null!==f)if(Rc(f.value,g)){if(f.children===e.children&&!B.current){b=Zf(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=qd(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=\nc);id(f.return,c,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(n(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);id(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,jd(b,c),e=ld(e),d=d(e),b.flags|=\n1,R(a,b,d,c),b.child;case 14:return d=b.type,e=ad(d,b.pendingProps),e=ad(d.type,e),$f(a,b,d,e,c);case 15:return bg(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ad(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,C(d)?(a=!0,nc(b)):a=!1,jd(b,c),Dd(b,d,e),Fd(b,d,e,c),hg(null,b,d,!0,a,c);case 19:return vg(a,b,c);case 22:return dg(a,b,c)}throw Error(n(156,b.tag));};function Dh(a,b){return Fc(a,b)}\nfunction Xh(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Yd(a,b,c,d){return new Xh(a,b,c,d)}function ag(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Wh(a){if(\"function\"===typeof a)return ag(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===na)return 11;if(a===qa)return 14}return 2}\nfunction je(a,b){var c=a.alternate;null===c?(c=Yd(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction le(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ag(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ia:return ne(c.children,e,f,b);case ja:g=8;e|=8;break;case ka:return a=Yd(12,c,b,e|2),a.elementType=ka,a.lanes=f,a;case oa:return a=Yd(13,c,b,e),a.elementType=oa,a.lanes=f,a;case pa:return a=Yd(19,c,b,e),a.elementType=pa,a.lanes=f,a;case sa:return ng(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case la:g=10;break a;case ma:g=9;break a;case na:g=11;\nbreak a;case qa:g=14;break a;case ra:g=16;d=null;break a}throw Error(n(130,null==a?a:typeof a,\"\"));}b=Yd(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function ne(a,b,c,d){a=Yd(7,a,d,b);a.lanes=c;return a}function ng(a,b,c,d){a=Yd(22,a,d,b);a.elementType=sa;a.lanes=c;a.stateNode={};return a}function ke(a,b,c){a=Yd(6,a,null,b);a.lanes=c;return a}\nfunction me(a,b,c){b=Yd(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction Yh(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=Sa;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=Ac(0);this.expirationTimes=Ac(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Ac(0);this.identifierPrefix=d;this.onRecoverableError=e;p&&(this.mutableSourceEagerHydrationData=\nnull)}function Zh(a,b,c,d,e,f,g,h,k){a=new Yh(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Yd(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null};od(f);return a}\nfunction $h(a){if(!a)return hc;a=a._reactInternals;a:{if(ya(a)!==a||1!==a.tag)throw Error(n(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(C(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(n(171));}if(1===a.tag){var c=a.type;if(C(c))return mc(a,c,b)}return b}\nfunction ai(a){var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(n(188));a=Object.keys(a).join(\",\");throw Error(n(268,a));}a=Ba(b);return null===a?null:a.stateNode}function bi(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c=l&&f>=v&&e<=m&&g<=r){a.splice(b,1);break}else if(!(d!==l||c.width!==k.width||rg)){v>f&&(k.height+=v-f,k.y=f);re)){l>d&&(k.width+=\nl-d,k.x=d);mc&&(c=g)),g \")+\"\\n\\nNo matching component was found for:\\n \")+a.join(\" > \")}return null};\nexports.getPublicRootInstance=function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return Fa(a.child.stateNode);default:return a.child.stateNode}};\nexports.injectIntoDevTools=function(a){a={bundleType:a.bundleType,version:a.version,rendererPackageName:a.rendererPackageName,rendererConfig:a.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ea.ReactCurrentDispatcher,findHostInstanceByFiber:di,findFiberByHostInstance:a.findFiberByHostInstance||\nei,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.0.0-fc46dba67-20220329\"};if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)a=!1;else{var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)a=!0;else{try{Nc=b.inject(a),Oc=b}catch(c){}a=b.checkDCE?!0:!1}}return a};exports.isAlreadyRendering=function(){return!1};\nexports.observeVisibleRects=function(a,b,c,d){if(!bb)throw Error(n(363));a=kh(a,b);var e=ib(a,c,d).disconnect;return{disconnect:function(){e()}}};exports.registerMutableSourceForHydration=function(a,b){var c=b._getVersion;c=c(b._source);null==a.mutableSourceEagerHydrationData?a.mutableSourceEagerHydrationData=[b,c]:a.mutableSourceEagerHydrationData.push(b,c)};exports.runWithPriority=function(a,b){var c=D;try{return D=a,b()}finally{D=c}};exports.shouldError=function(){return null};\nexports.shouldSuspend=function(){return!1};exports.updateContainer=function(a,b,c,d){var e=b.current,f=H(),g=zd(e);c=$h(c);null===b.context?b.context=c:b.pendingContext=c;b=qd(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);rd(e,b);a=Ad(e,g,f);null!==a&&sd(a,e,g);return g};\n\n return exports;\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-reconciler-constants.production.min.js');\n} else {\n module.exports = require('./cjs/react-reconciler-constants.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-reconciler.production.min.js');\n} else {\n module.exports = require('./cjs/react-reconciler.development.js');\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","var isArray = Array.isArray;\nvar toClassName = function (val) {\n var str = '';\n if (typeof val === 'string')\n str += val;\n else if (typeof val === 'object') {\n var tmp = void 0;\n if (isArray(val)) {\n var i = 0;\n var l = val.length;\n while (i < l) {\n tmp = toClassName(val[i++]);\n if (tmp) {\n if (str) {\n str += ' ';\n }\n str += tmp;\n }\n }\n }\n else {\n // eslint-disable-next-line guard-for-in\n for (tmp in val) {\n if (tmp && val[tmp]) {\n if (str) {\n str += ' ';\n }\n str += tmp;\n }\n }\n }\n }\n return str;\n};\nexport function cnb() {\n var l = arguments.length;\n var i = 0;\n var n;\n var tmp;\n var str = '';\n while (i < l) {\n n = arguments[i++];\n if (n) {\n tmp = toClassName(n);\n if (tmp) {\n if (str) {\n str += ' ';\n }\n str += tmp;\n }\n }\n }\n return str;\n}\n","function e(e,i,t,o){for(;i>=t&&!e(\"(min-resolution: \"+i/o+\"dppx)\").matches;)i--;return i}function i(i){if(void 0===i&&(i=window),!i)return 1;if(void 0!==i.devicePixelRatio)return i.devicePixelRatio;var t=i.document.frames;return void 0!==t?void 0!==t.devicePixelRatio?t.devicePixelRatio:t.screen.deviceXDPI/t.screen.systemXDPI:void 0!==i.matchMedia?function(i){for(var t=i.matchMedia,o=10,n=.1,r=1,a=o,c=0;c<4;c++)o=(a=10*e(t,o,n,r))+9,n=a,r*=10;return a/r}(i):1}function t(e,t){var o=(e instanceof Element?getComputedStyle(e).zoom:e.zoom)||1;return i(t)*(\"string\"==typeof o?parseFloat(o):o)}export{t as elementZoomLevel,i as zoomLevel};\n","import { cnb } from 'cnbuilder';\nimport * as React from 'react';\nimport { zoomLevel } from 'zoom-level';\nimport { DraggableCore } from 'react-draggable';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nvar doc = (typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === 'object' ? document : null;\nvar isBrowser = typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof document !== 'undefined';\nvar isUndef = function isUndef(v) {\n return typeof v === 'undefined';\n};\nvar isFun = function isFun(v) {\n return typeof v === 'function';\n};\nvar isNum = function isNum(v) {\n return typeof v === 'number';\n};\n/**\r\n * @description Will return renderer result if presented, div element otherwise.\r\n * If renderer is presented it'll receive `elementRef` function which should be used as HTMLElement's ref.\r\n *\r\n * @param props {ElementPropsWithElementRefAndRenderer}\r\n * @param elementRef {ElementRef}\r\n */\n\nvar renderDivWithRenderer = function renderDivWithRenderer(props, elementRef) {\n if (isFun(props.renderer)) {\n props.elementRef = elementRef;\n var renderer = props.renderer;\n delete props.renderer;\n return renderer(props);\n }\n\n delete props.elementRef;\n return React.createElement(\"div\", __assign({}, props, {\n ref: elementRef\n }));\n};\n\nvar getInnerSize = function getInnerSize(el, dimension, padding1, padding2) {\n var styles = getComputedStyle(el);\n\n if (styles.boxSizing === 'border-box') {\n return Math.max(0, (Number.parseFloat(styles[dimension]) || 0) - (Number.parseFloat(styles[padding1]) || 0) - (Number.parseFloat(styles[padding2]) || 0));\n }\n\n return Number.parseFloat(styles[dimension]) || 0;\n};\n/**\r\n * @description Return element's height without padding\r\n */\n\n\nvar getInnerHeight = function getInnerHeight(el) {\n return getInnerSize(el, 'height', 'paddingTop', 'paddingBottom');\n};\n/**\r\n * @description Return element's width without padding\r\n */\n\nvar getInnerWidth = function getInnerWidth(el) {\n return getInnerSize(el, 'width', 'paddingLeft', 'paddingRight');\n};\n/**\r\n * @description Return unique UUID v4\r\n */\n\nvar uuid = function uuid() {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n var uuid = '';\n\n for (var i = 0; i < 32; i++) {\n switch (i) {\n case 8:\n case 20:\n {\n uuid += \"-\".concat(Math.trunc(Math.random() * 16).toString(16));\n break;\n }\n\n case 12:\n {\n uuid += '-4';\n break;\n }\n\n case 16:\n {\n uuid += \"-\".concat((Math.random() * 16 | 0 & 3 | 8).toString(16));\n break;\n }\n\n default:\n {\n uuid += Math.trunc(Math.random() * 16).toString(16);\n }\n }\n }\n\n return uuid;\n};\n/**\r\n * @description Calculate thumb size for given viewport and track parameters\r\n *\r\n * @param {number} contentSize - Scrollable content size\r\n * @param {number} viewportSize - Viewport size\r\n * @param {number} trackSize - Track size thumb can move\r\n * @param {number} minimalSize - Minimal thumb's size\r\n * @param {number} maximalSize - Maximal thumb's size\r\n */\n\nvar calcThumbSize = function calcThumbSize(contentSize, viewportSize, trackSize, minimalSize, maximalSize) {\n if (viewportSize >= contentSize) {\n return 0;\n }\n\n var thumbSize = viewportSize / contentSize * trackSize;\n\n if (isNum(maximalSize)) {\n thumbSize = Math.min(maximalSize, thumbSize);\n }\n\n if (isNum(minimalSize)) {\n thumbSize = Math.max(minimalSize, thumbSize);\n }\n\n return thumbSize;\n};\n/**\r\n * @description Calculate thumb offset for given viewport, track and thumb parameters\r\n *\r\n * @param {number} contentSize - Scrollable content size\r\n * @param {number} viewportSize - Viewport size\r\n * @param {number} trackSize - Track size thumb can move\r\n * @param {number} thumbSize - Thumb size\r\n * @param {number} scroll - Scroll value to represent\r\n */\n\nvar calcThumbOffset = function calcThumbOffset(contentSize, viewportSize, trackSize, thumbSize, scroll) {\n if (!scroll || !thumbSize || viewportSize >= contentSize) {\n return 0;\n }\n\n return (trackSize - thumbSize) * scroll / (contentSize - viewportSize);\n};\n/**\r\n * @description Calculate scroll for given viewport, track and thumb parameters\r\n *\r\n * @param {number} contentSize - Scrollable content size\r\n * @param {number} viewportSize - Viewport size\r\n * @param {number} trackSize - Track size thumb can move\r\n * @param {number} thumbSize - Thumb size\r\n * @param {number} thumbOffset - Thumb's offset representing the scroll\r\n */\n\nvar calcScrollForThumbOffset = function calcScrollForThumbOffset(contentSize, viewportSize, trackSize, thumbSize, thumbOffset) {\n if (!thumbOffset || !thumbSize || viewportSize >= contentSize) {\n return 0;\n }\n\n return thumbOffset * (contentSize - viewportSize) / (trackSize - thumbSize);\n};\n/**\r\n * @description Returns scrollbar width specific for current environment. Can return undefined if DOM is not ready yet.\r\n */\n\nvar getScrollbarWidth = function getScrollbarWidth(force) {\n if (force === void 0) {\n force = false;\n }\n\n if (!doc) {\n getScrollbarWidth._cache = 0;\n return getScrollbarWidth._cache;\n }\n\n if (!force && !isUndef(getScrollbarWidth._cache)) {\n return getScrollbarWidth._cache;\n }\n\n var el = doc.createElement('div');\n el.setAttribute('style', 'position:absolute;width:100px;height:100px;top:-999px;left:-999px;overflow:scroll;');\n doc.body.append(el);\n /* istanbul ignore next */\n\n if (el.clientWidth === 0) {\n // Do not even cache this value because there is no calculations. Issue https://github.com/xobotyi/react-scrollbars-custom/issues/123\n el.remove();\n return;\n }\n\n getScrollbarWidth._cache = 100 - el.clientWidth;\n el.remove();\n return getScrollbarWidth._cache;\n};\n/**\r\n * @description Detect need of horizontal scroll reverse while RTL.\r\n */\n\nvar shouldReverseRtlScroll = function shouldReverseRtlScroll(force) {\n if (force === void 0) {\n force = false;\n }\n\n if (!force && !isUndef(shouldReverseRtlScroll._cache)) {\n return shouldReverseRtlScroll._cache;\n }\n\n if (!doc) {\n shouldReverseRtlScroll._cache = false;\n return shouldReverseRtlScroll._cache;\n }\n\n var el = doc.createElement('div');\n var child = doc.createElement('div');\n el.append(child);\n el.setAttribute('style', 'position:absolute;width:100px;height:100px;top:-999px;left:-999px;overflow:scroll;direction:rtl');\n child.setAttribute('style', 'width:1000px;height:1000px');\n doc.body.append(el);\n el.scrollLeft = -50;\n shouldReverseRtlScroll._cache = el.scrollLeft === -50;\n el.remove();\n return shouldReverseRtlScroll._cache;\n};\n\nvar Emittr =\n/** @class */\nfunction () {\n function Emittr(maxHandlers) {\n if (maxHandlers === void 0) {\n maxHandlers = 10;\n }\n\n this.setMaxHandlers(maxHandlers);\n this._handlers = Object.create(null);\n }\n\n Emittr._callEventHandlers = function (emitter, handlers, args) {\n if (!handlers.length) {\n return;\n }\n\n if (handlers.length === 1) {\n Reflect.apply(handlers[0], emitter, args);\n return;\n }\n\n handlers = __spreadArray([], handlers, true);\n var idx;\n\n for (idx = 0; idx < handlers.length; idx++) {\n Reflect.apply(handlers[idx], emitter, args);\n }\n };\n\n Emittr.prototype.setMaxHandlers = function (count) {\n if (!isNum(count) || count <= 0) {\n throw new TypeError(\"Expected maxHandlers to be a positive number, got '\".concat(count, \"' of type \").concat(_typeof(count)));\n }\n\n this._maxHandlers = count;\n return this;\n };\n\n Emittr.prototype.getMaxHandlers = function () {\n return this._maxHandlers;\n };\n\n Emittr.prototype.emit = function (name) {\n var args = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n\n if (_typeof(this._handlers[name]) !== 'object' || !Array.isArray(this._handlers[name])) {\n return false;\n }\n\n Emittr._callEventHandlers(this, this._handlers[name], args);\n\n return true;\n };\n\n Emittr.prototype.on = function (name, handler) {\n Emittr._addHandler(this, name, handler);\n\n return this;\n };\n\n Emittr.prototype.prependOn = function (name, handler) {\n Emittr._addHandler(this, name, handler, true);\n\n return this;\n };\n\n Emittr.prototype.once = function (name, handler) {\n if (!isFun(handler)) {\n throw new TypeError(\"Expected event handler to be a function, got \".concat(_typeof(handler)));\n }\n\n Emittr._addHandler(this, name, this._wrapOnceHandler(name, handler));\n\n return this;\n };\n\n Emittr.prototype.prependOnce = function (name, handler) {\n if (!isFun(handler)) {\n throw new TypeError(\"Expected event handler to be a function, got \".concat(_typeof(handler)));\n }\n\n Emittr._addHandler(this, name, this._wrapOnceHandler(name, handler), true);\n\n return this;\n };\n\n Emittr.prototype.off = function (name, handler) {\n Emittr._removeHandler(this, name, handler);\n\n return this;\n };\n\n Emittr.prototype.removeAllHandlers = function () {\n var handlers = this._handlers;\n this._handlers = Object.create(null);\n var removeHandlers = handlers.removeHandler;\n delete handlers.removeHandler;\n var idx;\n var eventName; // eslint-disable-next-line guard-for-in,no-restricted-syntax\n\n for (eventName in handlers) {\n for (idx = handlers[eventName].length - 1; idx >= 0; idx--) {\n Emittr._callEventHandlers(this, removeHandlers, [eventName, handlers[eventName][idx].handler || handlers[eventName][idx]]);\n }\n }\n\n return this;\n };\n\n Emittr.prototype._wrapOnceHandler = function (name, handler) {\n var onceState = {\n fired: false,\n handler: handler,\n wrappedHandler: undefined,\n emitter: this,\n event: name\n };\n\n var wrappedHandler = Emittr._onceWrapper.bind(onceState);\n\n onceState.wrappedHandler = wrappedHandler;\n wrappedHandler.handler = handler;\n wrappedHandler.event = name;\n return wrappedHandler;\n };\n\n Emittr._addHandler = function (emitter, name, handler, prepend) {\n if (prepend === void 0) {\n prepend = false;\n }\n\n if (!isFun(handler)) {\n throw new TypeError(\"Expected event handler to be a function, got \".concat(_typeof(handler)));\n }\n\n emitter._handlers[name] = emitter._handlers[name] || [];\n emitter.emit('addHandler', name, handler);\n\n if (prepend) {\n emitter._handlers[name].unshift(handler);\n } else {\n emitter._handlers[name].push(handler);\n }\n\n return emitter;\n };\n\n Emittr._onceWrapper = function _onceWrapper() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!this.fired) {\n this.fired = true;\n this.emitter.off(this.event, this.wrappedHandler);\n Reflect.apply(this.handler, this.emitter, args);\n }\n };\n\n Emittr._removeHandler = function (emitter, name, handler) {\n if (!isFun(handler)) {\n throw new TypeError(\"Expected event handler to be a function, got \".concat(_typeof(handler)));\n }\n\n if (isUndef(emitter._handlers[name]) || !emitter._handlers[name].length) {\n return emitter;\n }\n\n var idx = -1;\n\n if (emitter._handlers[name].length === 1) {\n if (emitter._handlers[name][0] === handler || emitter._handlers[name][0].handler === handler) {\n idx = 0;\n handler = emitter._handlers[name][0].handler || emitter._handlers[name][0];\n }\n } else {\n for (idx = emitter._handlers[name].length - 1; idx >= 0; idx--) {\n if (emitter._handlers[name][idx] === handler || emitter._handlers[name][idx].handler === handler) {\n handler = emitter._handlers[name][idx].handler || emitter._handlers[name][idx];\n break;\n }\n }\n }\n\n if (idx === -1) {\n return emitter;\n }\n\n if (idx === 0) {\n emitter._handlers[name].shift();\n } else {\n emitter._handlers[name].splice(idx, 1);\n }\n\n emitter.emit('removeHandler', name, handler);\n return emitter;\n };\n\n return Emittr;\n}();\n\nvar RAFLoop =\n/** @class */\nfunction () {\n function RAFLoop() {\n var _this = this;\n /**\r\n * @description List of targets to update\r\n */\n\n\n this.targets = [];\n /**\r\n * @description ID of requested animation frame. Valuable only if loop is active and has items to iterate.\r\n */\n\n this.animationFrameID = 0;\n /**\r\n * @description Loop's state.\r\n */\n\n this._isActive = false;\n /**\r\n * @description Start the loop if it wasn't yet.\r\n */\n\n this.start = function () {\n if (!_this._isActive && _this.targets.length) {\n _this._isActive = true;\n if (_this.animationFrameID) cancelAnimationFrame(_this.animationFrameID);\n _this.animationFrameID = requestAnimationFrame(_this.rafCallback);\n }\n\n return _this;\n };\n /**\r\n * @description Stop the loop if is was active.\r\n */\n\n\n this.stop = function () {\n if (_this._isActive) {\n _this._isActive = false;\n if (_this.animationFrameID) cancelAnimationFrame(_this.animationFrameID);\n _this.animationFrameID = 0;\n }\n\n return _this;\n };\n /**\r\n * @description Add target to the iteration list if it's not there.\r\n */\n\n\n this.addTarget = function (target, silent) {\n if (silent === void 0) {\n silent = false;\n }\n\n if (!_this.targets.includes(target)) {\n _this.targets.push(target);\n\n if (_this.targets.length === 1 && !silent) _this.start();\n }\n\n return _this;\n };\n /**\r\n * @description Remove target from iteration list if it was there.\r\n */\n\n\n this.removeTarget = function (target) {\n var idx = _this.targets.indexOf(target);\n\n if (idx !== -1) {\n _this.targets.splice(idx, 1);\n\n if (_this.targets.length === 0) _this.stop();\n }\n\n return _this;\n };\n /**\r\n * @description Callback that called each animation frame.\r\n */\n\n\n this.rafCallback = function () {\n if (!_this._isActive) {\n return 0;\n }\n\n for (var i = 0; i < _this.targets.length; i++) {\n if (!_this.targets[i]._unmounted) _this.targets[i].update();\n }\n\n _this.animationFrameID = requestAnimationFrame(_this.rafCallback);\n return _this.animationFrameID;\n };\n }\n\n Object.defineProperty(RAFLoop.prototype, \"isActive\", {\n /**\r\n * @description Loop's state.\r\n */\n get: function get() {\n return this._isActive;\n },\n enumerable: false,\n configurable: true\n });\n return RAFLoop;\n}();\nvar Loop = new RAFLoop();\n\nvar AXIS_DIRECTION;\n\n(function (AXIS_DIRECTION) {\n AXIS_DIRECTION[\"X\"] = \"x\";\n AXIS_DIRECTION[\"Y\"] = \"y\";\n})(AXIS_DIRECTION || (AXIS_DIRECTION = {}));\n\nvar TRACK_CLICK_BEHAVIOR;\n\n(function (TRACK_CLICK_BEHAVIOR) {\n TRACK_CLICK_BEHAVIOR[\"JUMP\"] = \"jump\";\n TRACK_CLICK_BEHAVIOR[\"STEP\"] = \"step\";\n})(TRACK_CLICK_BEHAVIOR || (TRACK_CLICK_BEHAVIOR = {}));\n\nvar ScrollbarThumb =\n/** @class */\nfunction (_super) {\n __extends(ScrollbarThumb, _super);\n\n function ScrollbarThumb() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.element = null;\n _this.initialOffsetX = 0;\n _this.initialOffsetY = 0;\n _this.elementRefHack = React.createRef();\n _this.lastDragData = {\n x: 0,\n y: 0,\n deltaX: 0,\n deltaY: 0,\n lastX: 0,\n lastY: 0\n };\n\n _this.handleOnDragStart = function (ev, data) {\n if (!_this.element) {\n _this.handleOnDragStop(ev, data);\n\n return;\n }\n\n if (isBrowser) {\n _this.prevUserSelect = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n _this.prevOnSelectStart = document.onselectstart;\n document.addEventListener('selectstart', ScrollbarThumb.selectStartReplacer);\n }\n\n if (_this.props.onDragStart) {\n _this.props.onDragStart(_this.lastDragData = {\n x: data.x - _this.initialOffsetX,\n y: data.y - _this.initialOffsetY,\n lastX: data.lastX - _this.initialOffsetX,\n lastY: data.lastY - _this.initialOffsetY,\n deltaX: data.deltaX,\n deltaY: data.deltaY\n });\n }\n\n _this.element.classList.add('dragging');\n };\n\n _this.handleOnDrag = function (ev, data) {\n if (!_this.element) {\n _this.handleOnDragStop(ev, data);\n\n return;\n }\n\n if (_this.props.onDrag) {\n _this.props.onDrag(_this.lastDragData = {\n x: data.x - _this.initialOffsetX,\n y: data.y - _this.initialOffsetY,\n lastX: data.lastX - _this.initialOffsetX,\n lastY: data.lastY - _this.initialOffsetY,\n deltaX: data.deltaX,\n deltaY: data.deltaY\n });\n }\n };\n\n _this.handleOnDragStop = function (ev, data) {\n var resultData = data ? {\n x: data.x - _this.initialOffsetX,\n y: data.y - _this.initialOffsetY,\n lastX: data.lastX - _this.initialOffsetX,\n lastY: data.lastY - _this.initialOffsetY,\n deltaX: data.deltaX,\n deltaY: data.deltaY\n } : _this.lastDragData;\n if (_this.props.onDragEnd) _this.props.onDragEnd(resultData);\n if (_this.element) _this.element.classList.remove('dragging');\n\n if (isBrowser) {\n document.body.style.userSelect = _this.prevUserSelect;\n\n if (_this.prevOnSelectStart) {\n document.addEventListener('selectstart', _this.prevOnSelectStart);\n }\n\n _this.prevOnSelectStart = null;\n }\n\n _this.initialOffsetX = 0;\n _this.initialOffsetY = 0;\n _this.lastDragData = {\n x: 0,\n y: 0,\n deltaX: 0,\n deltaY: 0,\n lastX: 0,\n lastY: 0\n };\n };\n\n _this.handleOnMouseDown = function (ev) {\n if (!_this.element) {\n return;\n }\n\n ev.preventDefault();\n ev.stopPropagation();\n\n if (!isUndef(ev.offsetX)) {\n /* istanbul ignore next */\n _this.initialOffsetX = ev.offsetX;\n /* istanbul ignore next */\n\n _this.initialOffsetY = ev.offsetY;\n } else {\n var rect = _this.element.getBoundingClientRect();\n\n _this.initialOffsetX = (ev.clientX || ev.touches[0].clientX) - rect.left;\n _this.initialOffsetY = (ev.clientY || ev.touches[0].clientY) - rect.top;\n }\n };\n\n _this.elementRef = function (ref) {\n if (isFun(_this.props.elementRef)) _this.props.elementRef(ref);\n _this.element = ref; // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n\n _this.elementRefHack.current = ref;\n };\n\n return _this;\n }\n\n ScrollbarThumb.prototype.componentDidMount = function () {\n if (!this.element) {\n this.setState(function () {\n throw new Error(\" Element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n }\n };\n\n ScrollbarThumb.prototype.componentWillUnmount = function () {\n this.handleOnDragStop();\n this.elementRef(null);\n };\n\n ScrollbarThumb.prototype.render = function () {\n var _a = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.elementRef;\n var axis = _a.axis;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onDrag;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onDragEnd;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onDragStart;\n var props = __rest(_a, [\"elementRef\", \"axis\", \"onDrag\", \"onDragEnd\", \"onDragStart\"]);\n\n props.className = cnb('ScrollbarsCustom-Thumb', axis === AXIS_DIRECTION.X ? 'ScrollbarsCustom-ThumbX' : 'ScrollbarsCustom-ThumbY', props.className);\n\n if (props.renderer) {\n props.axis = axis;\n }\n\n return React.createElement(DraggableCore, {\n allowAnyClick: false,\n enableUserSelectHack: false,\n onMouseDown: this.handleOnMouseDown,\n onDrag: this.handleOnDrag,\n onStart: this.handleOnDragStart,\n onStop: this.handleOnDragStop,\n nodeRef: this.elementRefHack\n }, renderDivWithRenderer(props, this.elementRef));\n };\n\n ScrollbarThumb.selectStartReplacer = function () {\n return false;\n };\n\n return ScrollbarThumb;\n}(React.Component);\n\nvar ScrollbarTrack =\n/** @class */\nfunction (_super) {\n __extends(ScrollbarTrack, _super);\n\n function ScrollbarTrack() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.element = null;\n\n _this.elementRef = function (ref) {\n if (isFun(_this.props.elementRef)) _this.props.elementRef(ref);\n _this.element = ref;\n };\n\n _this.handleClick = function (ev) {\n if (!ev || !_this.element || ev.button !== 0) {\n return;\n }\n\n if (isFun(_this.props.onClick) && ev.target === _this.element) {\n if (!isUndef(ev.offsetX)) {\n _this.props.onClick(ev, {\n axis: _this.props.axis,\n offset: _this.props.axis === AXIS_DIRECTION.X ? ev.offsetX : ev.offsetY\n });\n } else {\n // support for old browsers\n\n /* istanbul ignore next */\n var rect = _this.element.getBoundingClientRect();\n /* istanbul ignore next */\n\n\n _this.props.onClick(ev, {\n axis: _this.props.axis,\n offset: _this.props.axis === AXIS_DIRECTION.X ? (ev.clientX || ev.touches[0].clientX) - rect.left : (ev.clientY || ev.touches[0].clientY) - rect.top\n });\n }\n }\n\n return true;\n };\n\n return _this;\n }\n\n ScrollbarTrack.prototype.componentDidMount = function () {\n if (!this.element) {\n this.setState(function () {\n throw new Error(\"Element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n return;\n }\n\n this.element.addEventListener('click', this.handleClick);\n };\n\n ScrollbarTrack.prototype.componentWillUnmount = function () {\n if (this.element) {\n this.element.removeEventListener('click', this.handleClick);\n this.element = null;\n this.elementRef(null);\n }\n };\n\n ScrollbarTrack.prototype.render = function () {\n var _a = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.elementRef;\n var axis = _a.axis;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onClick;\n var props = __rest(_a, [\"elementRef\", \"axis\", \"onClick\"]);\n\n props.className = cnb('ScrollbarsCustom-Track', axis === AXIS_DIRECTION.X ? 'ScrollbarsCustom-TrackX' : 'ScrollbarsCustom-TrackY', props.className);\n\n if (props.renderer) {\n props.axis = axis;\n }\n\n return renderDivWithRenderer(props, this.elementRef);\n };\n\n return ScrollbarTrack;\n}(React.Component);\n\nvar style = {\n holder: {\n position: 'relative',\n width: '100%',\n height: '100%'\n },\n wrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0\n },\n content: {\n boxSizing: 'border-box'\n },\n track: {\n common: {\n position: 'absolute',\n overflow: 'hidden',\n borderRadius: 4,\n background: 'rgba(0,0,0,.1)',\n userSelect: 'none'\n },\n x: {\n height: 10,\n width: 'calc(100% - 20px)',\n bottom: 0,\n left: 10\n },\n y: {\n width: 10,\n height: 'calc(100% - 20px)',\n top: 10\n }\n },\n thumb: {\n common: {\n cursor: 'pointer',\n borderRadius: 4,\n background: 'rgba(0,0,0,.4)'\n },\n x: {\n height: '100%',\n width: 0\n },\n y: {\n width: '100%',\n height: 0\n }\n }\n};\n\nvar pageZoomLevel = isBrowser ? zoomLevel() : 1;\n\nif (isBrowser) {\n window.addEventListener('resize', function () {\n pageZoomLevel = zoomLevel();\n }, {\n passive: true\n });\n}\n\nvar ScrollbarContext = React.createContext({\n parentScrollbar: null\n});\n\nvar Scrollbar =\n/** @class */\nfunction (_super) {\n __extends(Scrollbar, _super);\n\n function Scrollbar(props) {\n var _this = _super.call(this, props) || this;\n /**\r\n * @description Get current scroll-related values.
\r\n * If force if truthy - will recalculate them instead of returning cached values.\r\n *\r\n * @return ScrollState\r\n */\n\n\n _this.getScrollState = function (force) {\n if (force === void 0) {\n force = false;\n }\n\n if (_this.scrollValues && !force) {\n return __assign({}, _this.scrollValues);\n }\n\n var scrollState = {\n clientHeight: 0,\n clientWidth: 0,\n contentScrollHeight: 0,\n contentScrollWidth: 0,\n scrollHeight: 0,\n scrollWidth: 0,\n scrollTop: 0,\n scrollLeft: 0,\n scrollYBlocked: false,\n scrollXBlocked: false,\n scrollYPossible: false,\n scrollXPossible: false,\n trackYVisible: false,\n trackXVisible: false,\n zoomLevel: pageZoomLevel * 1,\n isRTL: undefined\n };\n var props = _this.props;\n scrollState.isRTL = _this.state.isRTL;\n scrollState.scrollYBlocked = props.noScroll || props.noScrollY;\n scrollState.scrollXBlocked = props.noScroll || props.noScrollX;\n\n if (_this.scrollerElement) {\n scrollState.clientHeight = _this.scrollerElement.clientHeight;\n scrollState.clientWidth = _this.scrollerElement.clientWidth;\n scrollState.scrollHeight = _this.scrollerElement.scrollHeight;\n scrollState.scrollWidth = _this.scrollerElement.scrollWidth;\n scrollState.scrollTop = _this.scrollerElement.scrollTop;\n scrollState.scrollLeft = _this.scrollerElement.scrollLeft;\n scrollState.scrollYPossible = !scrollState.scrollYBlocked && scrollState.scrollHeight > scrollState.clientHeight;\n scrollState.scrollXPossible = !scrollState.scrollXBlocked && scrollState.scrollWidth > scrollState.clientWidth;\n scrollState.trackYVisible = scrollState.scrollYPossible || props.permanentTracks || props.permanentTrackY;\n scrollState.trackXVisible = scrollState.scrollXPossible || props.permanentTracks || props.permanentTrackX;\n }\n\n if (_this.contentElement) {\n scrollState.contentScrollHeight = _this.contentElement.scrollHeight;\n scrollState.contentScrollWidth = _this.contentElement.scrollWidth;\n }\n\n return scrollState;\n };\n /**\r\n * @description Scroll to top border\r\n */\n\n\n _this.scrollToTop = function () {\n if (_this.scrollerElement) {\n _this.scrollerElement.scrollTop = 0;\n }\n\n return _this;\n };\n /**\r\n * @description Scroll to left border\r\n */\n\n\n _this.scrollToLeft = function () {\n if (_this.scrollerElement) {\n _this.scrollerElement.scrollLeft = 0;\n }\n\n return _this;\n };\n /**\r\n * @description Scroll to bottom border\r\n */\n\n\n _this.scrollToBottom = function () {\n if (_this.scrollerElement) {\n _this.scrollerElement.scrollTop = _this.scrollerElement.scrollHeight - _this.scrollerElement.clientHeight;\n }\n\n return _this;\n };\n /**\r\n * @description Scroll to right border\r\n */\n\n\n _this.scrollToRight = function () {\n if (_this.scrollerElement) {\n _this.scrollerElement.scrollLeft = _this.scrollerElement.scrollWidth - _this.scrollerElement.clientWidth;\n }\n\n return _this;\n };\n /**\r\n * @description Set the scrolls at given coordinates.
\r\n * If coordinate is undefined - current scroll value will persist.\r\n */\n\n\n _this.scrollTo = function (x, y) {\n if (_this.scrollerElement) {\n if (isNum(x)) _this.scrollerElement.scrollLeft = x;\n if (isNum(y)) _this.scrollerElement.scrollTop = y;\n }\n\n return _this;\n };\n /**\r\n * @description Center the viewport at given coordinates.
\r\n * If coordinate is undefined - current scroll value will persist.\r\n */\n\n\n _this.centerAt = function (x, y) {\n if (_this.scrollerElement) {\n if (isNum(x)) _this.scrollerElement.scrollLeft = x - _this.scrollerElement.clientWidth / 2;\n if (isNum(y)) _this.scrollerElement.scrollTop = y - _this.scrollerElement.clientHeight / 2;\n }\n\n return _this;\n };\n\n _this.update = function (force) {\n if (force === void 0) {\n force = false;\n }\n\n if (!_this.scrollerElement) {\n return;\n } // autodetect direction if not defined\n\n\n if (isUndef(_this.state.isRTL)) {\n _this.setState({\n isRTL: getComputedStyle(_this.scrollerElement).direction === 'rtl'\n });\n\n return _this.getScrollState();\n }\n\n var scrollState = _this.getScrollState(true);\n\n var prevScrollState = __assign({}, _this.scrollValues);\n\n var props = _this.props;\n var bitmask = 0;\n\n if (!force) {\n if (prevScrollState.clientHeight !== scrollState.clientHeight) bitmask |= Math.trunc(1);\n if (prevScrollState.clientWidth !== scrollState.clientWidth) bitmask |= 1 << 1;\n if (prevScrollState.scrollHeight !== scrollState.scrollHeight) bitmask |= 1 << 2;\n if (prevScrollState.scrollWidth !== scrollState.scrollWidth) bitmask |= 1 << 3;\n if (prevScrollState.scrollTop !== scrollState.scrollTop) bitmask |= 1 << 4;\n if (prevScrollState.scrollLeft !== scrollState.scrollLeft) bitmask |= 1 << 5;\n if (prevScrollState.scrollYBlocked !== scrollState.scrollYBlocked) bitmask |= 1 << 6;\n if (prevScrollState.scrollXBlocked !== scrollState.scrollXBlocked) bitmask |= 1 << 7;\n if (prevScrollState.scrollYPossible !== scrollState.scrollYPossible) bitmask |= 1 << 8;\n if (prevScrollState.scrollXPossible !== scrollState.scrollXPossible) bitmask |= 1 << 9;\n if (prevScrollState.trackYVisible !== scrollState.trackYVisible) bitmask |= 1 << 10;\n if (prevScrollState.trackXVisible !== scrollState.trackXVisible) bitmask |= 1 << 11;\n if (prevScrollState.isRTL !== scrollState.isRTL) bitmask |= 1 << 12;\n if (prevScrollState.contentScrollHeight !== scrollState.contentScrollHeight) bitmask |= 1 << 13;\n if (prevScrollState.contentScrollWidth !== scrollState.contentScrollWidth) bitmask |= 1 << 14;\n if (prevScrollState.zoomLevel !== scrollState.zoomLevel) bitmask |= 1 << 15; // if not forced and nothing has changed - skip this update\n\n if (bitmask === 0) {\n return prevScrollState;\n }\n } else {\n bitmask = 32767;\n }\n\n if (!props.native && _this.holderElement) {\n if (bitmask & 1 << 13 && (props.translateContentSizesToHolder || props.translateContentSizeYToHolder)) {\n _this.holderElement.style.height = \"\".concat(scrollState.contentScrollHeight, \"px\");\n }\n\n if (bitmask & 1 << 14 && (props.translateContentSizesToHolder || props.translateContentSizeXToHolder)) {\n _this.holderElement.style.width = \"\".concat(scrollState.contentScrollWidth, \"px\");\n }\n\n if (props.translateContentSizesToHolder || props.translateContentSizeYToHolder || props.translateContentSizeXToHolder) {\n if (!scrollState.clientHeight && scrollState.contentScrollHeight || !scrollState.clientWidth && scrollState.contentScrollWidth) {\n return;\n }\n }\n } // if scrollbars visibility has changed\n\n\n if (bitmask & 1 << 10 || bitmask & 1 << 11) {\n prevScrollState.scrollYBlocked = scrollState.scrollYBlocked;\n prevScrollState.scrollXBlocked = scrollState.scrollXBlocked;\n prevScrollState.scrollYPossible = scrollState.scrollYPossible;\n prevScrollState.scrollXPossible = scrollState.scrollXPossible;\n\n if (_this.trackYElement && bitmask & 1 << 10) {\n _this.trackYElement.style.display = scrollState.trackYVisible ? '' : 'none';\n }\n\n if (_this.trackXElement && bitmask & 1 << 11) {\n _this.trackXElement.style.display = scrollState.trackXVisible ? '' : 'none';\n }\n\n _this.scrollValues = prevScrollState;\n\n _this.setState({\n trackYVisible: _this.scrollValues.trackYVisible = scrollState.trackYVisible,\n trackXVisible: _this.scrollValues.trackXVisible = scrollState.trackXVisible\n });\n\n return;\n }\n\n (props.native ? _this.updaterNative : _this.updaterCustom)(bitmask, scrollState);\n _this.scrollValues = scrollState;\n\n if (!props.native && bitmask & 1 << 15) {\n getScrollbarWidth(true);\n\n _this.forceUpdate();\n }\n\n _this.eventEmitter.emit('update', __assign({}, scrollState), prevScrollState);\n\n if (bitmask & 1 << 4 || bitmask & 1 << 5) _this.eventEmitter.emit('scroll', __assign({}, scrollState), prevScrollState);\n return _this.scrollValues;\n }; // eslint-disable-next-line class-methods-use-this\n\n\n _this.updaterNative = function () {\n // just for future\n return true;\n };\n\n _this.updaterCustom = function (bitmask, scrollValues) {\n var props = _this.props;\n\n if (_this.trackYElement) {\n if (_this.thumbYElement && (bitmask & Math.trunc(1) || bitmask & 1 << 2 || bitmask & 1 << 4 || bitmask & 1 << 6 || bitmask & 1 << 8)) {\n if (scrollValues.scrollYPossible) {\n var trackInnerSize = getInnerHeight(_this.trackYElement);\n var thumbSize = calcThumbSize(scrollValues.scrollHeight, scrollValues.clientHeight, trackInnerSize, props.minimalThumbYSize || props.minimalThumbSize, props.maximalThumbYSize || props.maximalThumbSize);\n var thumbOffset = calcThumbOffset(scrollValues.scrollHeight, scrollValues.clientHeight, trackInnerSize, thumbSize, scrollValues.scrollTop);\n _this.thumbYElement.style.transform = \"translateY(\".concat(thumbOffset, \"px)\");\n _this.thumbYElement.style.height = \"\".concat(thumbSize, \"px\");\n _this.thumbYElement.style.display = '';\n } else {\n _this.thumbYElement.style.transform = '';\n _this.thumbYElement.style.height = '0px';\n _this.thumbYElement.style.display = 'none';\n }\n }\n }\n\n if (_this.trackXElement) {\n if (_this.thumbXElement && (bitmask & 1 << 1 || bitmask & 1 << 3 || bitmask & 1 << 5 || bitmask & 1 << 7 || bitmask & 1 << 9 || bitmask & 1 << 12)) {\n if (scrollValues.scrollXPossible) {\n var trackInnerSize = getInnerWidth(_this.trackXElement);\n var thumbSize = calcThumbSize(scrollValues.scrollWidth, scrollValues.clientWidth, trackInnerSize, props.minimalThumbXSize || props.minimalThumbSize, props.maximalThumbXSize || props.maximalThumbSize);\n var thumbOffset = calcThumbOffset(scrollValues.scrollWidth, scrollValues.clientWidth, trackInnerSize, thumbSize, scrollValues.scrollLeft);\n\n if (_this.state.isRTL && shouldReverseRtlScroll()) {\n thumbOffset += trackInnerSize - thumbSize;\n }\n\n _this.thumbXElement.style.transform = \"translateX(\".concat(thumbOffset, \"px)\");\n _this.thumbXElement.style.width = \"\".concat(thumbSize, \"px\");\n _this.thumbXElement.style.display = '';\n } else {\n _this.thumbXElement.style.transform = '';\n _this.thumbXElement.style.width = '0px';\n _this.thumbXElement.style.display = 'none';\n }\n }\n }\n\n return true;\n };\n\n _this.elementRefHolder = function (ref) {\n _this.holderElement = ref;\n\n if (isFun(_this.props.elementRef)) {\n _this.props.elementRef(ref);\n }\n };\n\n _this.elementRefWrapper = function (ref) {\n _this.wrapperElement = ref;\n\n if (isFun(_this.props.wrapperProps.elementRef)) {\n _this.props.wrapperProps.elementRef(ref);\n }\n };\n\n _this.elementRefScroller = function (ref) {\n _this.scrollerElement = ref;\n\n if (isFun(_this.props.scrollerProps.elementRef)) {\n _this.props.scrollerProps.elementRef(ref);\n }\n };\n\n _this.elementRefContent = function (ref) {\n _this.contentElement = ref;\n\n if (isFun(_this.props.contentProps.elementRef)) {\n _this.props.contentProps.elementRef(ref);\n }\n };\n\n _this.elementRefTrackX = function (ref) {\n _this.trackXElement = ref;\n\n if (isFun(_this.props.trackXProps.elementRef)) {\n _this.props.trackXProps.elementRef(ref);\n }\n };\n\n _this.elementRefTrackY = function (ref) {\n _this.trackYElement = ref;\n\n if (isFun(_this.props.trackYProps.elementRef)) {\n _this.props.trackYProps.elementRef(ref);\n }\n };\n\n _this.elementRefThumbX = function (ref) {\n _this.thumbXElement = ref;\n\n if (isFun(_this.props.thumbXProps.elementRef)) {\n _this.props.thumbXProps.elementRef(ref);\n }\n };\n\n _this.elementRefThumbY = function (ref) {\n _this.thumbYElement = ref;\n\n if (isFun(_this.props.thumbYProps.elementRef)) {\n _this.props.thumbYProps.elementRef(ref);\n }\n };\n\n _this.handleTrackXClick = function (ev, values) {\n if (_this.props.trackXProps.onClick) {\n _this.props.trackXProps.onClick(ev, values);\n }\n\n if (!_this.scrollerElement || !_this.trackXElement || !_this.thumbXElement || !_this.scrollValues || !_this.scrollValues.scrollXPossible) {\n return;\n }\n\n _this._scrollDetection();\n\n var thumbSize = _this.thumbXElement.clientWidth;\n var trackInnerSize = getInnerWidth(_this.trackXElement);\n var thumbOffset = (_this.scrollValues.isRTL && shouldReverseRtlScroll() ? values.offset + thumbSize / 2 - trackInnerSize : values.offset - thumbSize / 2) - (Number.parseFloat(getComputedStyle(_this.trackXElement).paddingLeft) || 0);\n var target = calcScrollForThumbOffset(_this.scrollValues.scrollWidth, _this.scrollValues.clientWidth, trackInnerSize, thumbSize, thumbOffset);\n\n if (_this.props.trackClickBehavior === TRACK_CLICK_BEHAVIOR.STEP) {\n target = (_this.scrollValues.isRTL ? _this.scrollValues.scrollLeft > target : _this.scrollValues.scrollLeft < target) ? _this.scrollValues.scrollLeft + _this.scrollValues.clientWidth : _this.scrollValues.scrollLeft - _this.scrollValues.clientWidth;\n }\n\n _this.scrollerElement.scrollLeft = target;\n };\n\n _this.handleTrackYClick = function (ev, values) {\n if (_this.props.trackYProps.onClick) _this.props.trackYProps.onClick(ev, values);\n\n if (!_this.scrollerElement || !_this.trackYElement || !_this.thumbYElement || !_this.scrollValues || !_this.scrollValues.scrollYPossible) {\n return;\n }\n\n _this._scrollDetection();\n\n var thumbSize = _this.thumbYElement.clientHeight;\n var target = calcScrollForThumbOffset(_this.scrollValues.scrollHeight, _this.scrollValues.clientHeight, getInnerHeight(_this.trackYElement), thumbSize, values.offset - thumbSize / 2) - (Number.parseFloat(getComputedStyle(_this.trackYElement).paddingTop) || 0);\n\n if (_this.props.trackClickBehavior === TRACK_CLICK_BEHAVIOR.JUMP) {\n _this.scrollerElement.scrollTop = target;\n } else {\n _this.scrollerElement.scrollTop = _this.scrollValues.scrollTop < target ? _this.scrollValues.scrollTop + _this.scrollValues.clientHeight : _this.scrollValues.scrollTop - _this.scrollValues.clientHeight;\n }\n };\n\n _this.handleTrackYMouseWheel = function (ev) {\n var props = _this.props;\n\n if (props.trackYProps && props.trackYProps.onWheel) {\n props.trackYProps.onWheel(ev);\n }\n\n if (props.disableTracksMousewheelScrolling || props.disableTrackYMousewheelScrolling) {\n return;\n }\n\n _this._scrollDetection();\n\n if (!_this.scrollerElement || _this.scrollValues.scrollYBlocked) {\n return;\n }\n\n _this.scrollTop += ev.deltaY;\n };\n\n _this.handleTrackXMouseWheel = function (ev) {\n var props = _this.props;\n\n if (props.trackXProps && props.trackXProps.onWheel) {\n props.trackXProps.onWheel(ev);\n }\n\n if (props.disableTracksMousewheelScrolling || props.disableTrackXMousewheelScrolling) {\n return;\n }\n\n _this._scrollDetection();\n\n if (!_this.scrollerElement || _this.scrollValues.scrollXBlocked) {\n return;\n }\n\n _this.scrollLeft += ev.deltaX;\n };\n\n _this.handleThumbXDrag = function (data) {\n var _a;\n\n if (!_this.trackXElement || !_this.thumbXElement || !_this.scrollerElement || !_this.scrollValues || !_this.scrollValues.scrollXPossible) {\n return;\n }\n\n _this._scrollDetection();\n\n var trackRect = _this.trackXElement.getBoundingClientRect();\n\n var styles = getComputedStyle(_this.trackXElement);\n var paddingLeft = Number.parseFloat(styles.paddingLeft) || 0;\n var paddingRight = Number.parseFloat(styles.paddingRight) || 0;\n var trackInnerSize = trackRect.width - paddingLeft - paddingRight;\n var thumbSize = _this.thumbXElement.clientWidth;\n var offset = _this.scrollValues.isRTL && shouldReverseRtlScroll() ? data.x + thumbSize - trackInnerSize + paddingLeft : data.lastX - paddingLeft;\n _this.scrollerElement.scrollLeft = calcScrollForThumbOffset(_this.scrollValues.scrollWidth, _this.scrollValues.clientWidth, trackInnerSize, thumbSize, offset);\n\n if ((_a = _this.props.thumbXProps) === null || _a === void 0 ? void 0 : _a.onDrag) {\n _this.props.thumbXProps.onDrag(data);\n }\n };\n\n _this.handleThumbXDragEnd = function (data) {\n var _a;\n\n _this.handleThumbXDrag(data);\n\n if ((_a = _this.props.thumbXProps) === null || _a === void 0 ? void 0 : _a.onDragEnd) {\n _this.props.thumbXProps.onDragEnd(data);\n }\n };\n\n _this.handleThumbYDrag = function (data) {\n var _a;\n\n if (!_this.scrollerElement || !_this.trackYElement || !_this.thumbYElement || !_this.scrollValues || !_this.scrollValues.scrollYPossible) {\n return;\n }\n\n _this._scrollDetection();\n\n var trackRect = _this.trackYElement.getBoundingClientRect();\n\n var styles = getComputedStyle(_this.trackYElement);\n var paddingTop = Number.parseFloat(styles.paddingTop) || 0;\n var paddingBottom = Number.parseFloat(styles.paddingBottom) || 0;\n var trackInnerSize = trackRect.height - paddingTop - paddingBottom;\n var thumbSize = _this.thumbYElement.clientHeight;\n var offset = data.y - paddingTop;\n _this.scrollerElement.scrollTop = calcScrollForThumbOffset(_this.scrollValues.scrollHeight, _this.scrollValues.clientHeight, trackInnerSize, thumbSize, offset);\n\n if ((_a = _this.props.thumbYProps) === null || _a === void 0 ? void 0 : _a.onDrag) {\n _this.props.thumbYProps.onDrag(data);\n }\n };\n\n _this.handleThumbYDragEnd = function (data) {\n var _a;\n\n _this.handleThumbYDrag(data);\n\n if ((_a = _this.props.thumbYProps) === null || _a === void 0 ? void 0 : _a.onDragEnd) {\n _this.props.thumbYProps.onDragEnd(data);\n }\n };\n\n _this.handleScrollerScroll = function () {\n _this._scrollDetection();\n };\n\n _this._scrollDetection = function () {\n if (!_this._scrollDetectionTO) {\n _this.eventEmitter.emit('scrollStart', _this.getScrollState());\n } else if (isBrowser) {\n window.clearTimeout(_this._scrollDetectionTO);\n }\n\n _this._scrollDetectionTO = isBrowser ? window.setTimeout(_this._scrollDetectionCallback, _this.props.scrollDetectionThreshold || 0) : null;\n };\n\n _this._scrollDetectionCallback = function () {\n _this._scrollDetectionTO = null;\n\n _this.eventEmitter.emit('scrollStop', _this.getScrollState());\n };\n\n _this.state = {\n trackXVisible: false,\n trackYVisible: false,\n isRTL: props.rtl\n };\n _this.scrollValues = _this.getScrollState(true);\n _this.eventEmitter = new Emittr(15);\n if (props.onUpdate) _this.eventEmitter.on('update', props.onUpdate);\n if (props.onScroll) _this.eventEmitter.on('scroll', props.onScroll);\n if (props.onScrollStart) _this.eventEmitter.on('scrollStart', props.onScrollStart);\n if (props.onScrollStop) _this.eventEmitter.on('scrollStop', props.onScrollStop);\n _this.id = uuid();\n return _this;\n }\n\n Object.defineProperty(Scrollbar.prototype, \"scrollTop\", {\n // eslint-disable-next-line react/sort-comp\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.scrollTop;\n }\n\n return 0;\n },\n set: function set(top) {\n if (this.scrollerElement) {\n this.scrollerElement.scrollTop = top;\n this.update();\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"scrollLeft\", {\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.scrollLeft;\n }\n\n return 0;\n },\n set: function set(left) {\n if (this.scrollerElement) {\n this.scrollerElement.scrollLeft = left;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"scrollHeight\", {\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.scrollHeight;\n }\n\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"scrollWidth\", {\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.scrollWidth;\n }\n\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"clientHeight\", {\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.clientHeight;\n }\n\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Scrollbar.prototype, \"clientWidth\", {\n get: function get() {\n if (this.scrollerElement) {\n return this.scrollerElement.clientWidth;\n }\n\n return 0;\n },\n enumerable: false,\n configurable: true\n }); // eslint-disable-next-line react/sort-comp\n\n Scrollbar.calculateStyles = function (props, state, scrollValues, scrollbarWidth) {\n var _a, _b, _c, _d;\n\n var useDefaultStyles = !props.noDefaultStyles;\n return {\n holder: __assign(__assign(__assign({}, useDefaultStyles && style.holder), {\n position: 'relative'\n }), props.style),\n wrapper: __assign(__assign(__assign({}, useDefaultStyles && __assign(__assign(__assign({}, style.wrapper), !props.disableTracksWidthCompensation && !props.disableTrackYWidthCompensation && (_a = {}, _a[state.isRTL ? 'left' : 'right'] = state.trackYVisible ? 10 : 0, _a)), !props.disableTracksWidthCompensation && !props.disableTrackXWidthCompensation && {\n bottom: state.trackXVisible ? 10 : 0\n })), props.wrapperProps.style), {\n position: 'absolute',\n overflow: 'hidden'\n }),\n content: __assign(__assign(__assign(__assign(__assign({}, useDefaultStyles && style.content), props.translateContentSizesToHolder || props.translateContentSizeYToHolder || props.translateContentSizeXToHolder ? {\n display: 'table-cell'\n } : {\n padding: 0.05 // needed to disable margin collapsing without flexboxes, other possible solutions here: https://stackoverflow.com/questions/19718634/how-to-disable-margin-collapsing\n\n }), useDefaultStyles && !(props.translateContentSizesToHolder || props.translateContentSizeYToHolder) && {\n minHeight: '100%'\n }), useDefaultStyles && !(props.translateContentSizesToHolder || props.translateContentSizeXToHolder) && {\n minWidth: '100%'\n }), props.contentProps.style),\n scroller: __assign(__assign(__assign(__assign((_b = {\n position: 'absolute',\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n paddingBottom: !scrollbarWidth && scrollValues.scrollXPossible ? props.fallbackScrollbarWidth : undefined\n }, _b[state.isRTL ? 'paddingLeft' : 'paddingRight'] = !scrollbarWidth && scrollValues.scrollYPossible ? props.fallbackScrollbarWidth : undefined, _b), props.scrollerProps.style), !isUndef(props.rtl) && {\n direction: props.rtl ? 'rtl' : 'ltr'\n }), props.momentum && {\n WebkitOverflowScrolling: 'touch'\n }), (_c = {\n overflowY: scrollValues.scrollYPossible ? 'scroll' : 'hidden',\n overflowX: scrollValues.scrollXPossible ? 'scroll' : 'hidden',\n marginBottom: scrollValues.scrollXPossible ? -(scrollbarWidth || props.fallbackScrollbarWidth) - Number(scrollValues.zoomLevel !== 1) : undefined\n }, _c[state.isRTL ? 'marginLeft' : 'marginRight'] = scrollValues.scrollYPossible ? -(scrollbarWidth || props.fallbackScrollbarWidth) - Number(scrollValues.zoomLevel !== 1) : undefined, _c)),\n trackX: __assign(__assign(__assign(__assign({}, useDefaultStyles && style.track.common), useDefaultStyles && style.track.x), props.trackXProps.style), !state.trackXVisible && {\n display: 'none'\n }),\n trackY: __assign(__assign(__assign(__assign(__assign({}, useDefaultStyles && style.track.common), useDefaultStyles && style.track.y), useDefaultStyles && (_d = {}, _d[state.isRTL ? 'left' : 'right'] = 0, _d)), props.trackYProps.style), !state.trackYVisible && {\n display: 'none'\n }),\n thumbX: __assign(__assign(__assign({}, useDefaultStyles && style.thumb.common), useDefaultStyles && style.thumb.x), props.thumbXProps.style),\n thumbY: __assign(__assign(__assign({}, useDefaultStyles && style.thumb.common), useDefaultStyles && style.thumb.y), props.thumbYProps.style)\n };\n };\n\n Scrollbar.prototype.componentDidMount = function () {\n if (!this.scrollerElement) {\n this.setState(function () {\n throw new Error(\"scroller element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n return;\n }\n\n if (!this.contentElement) {\n this.setState(function () {\n throw new Error(\"content element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n return;\n }\n\n var props = this.props;\n\n if (!props.native && !props.mobileNative) {\n // ToDo: move native state to the state so it can be synchronized\n if (!this.holderElement) {\n this.setState(function () {\n throw new Error(\"holder element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n return;\n }\n\n if (!this.wrapperElement) {\n this.setState(function () {\n throw new Error(\"wrapper element was not created. Possibly you haven't provided HTMLDivElement to renderer's `elementRef` function.\");\n });\n return;\n }\n }\n\n Loop.addTarget(this);\n\n if (!isUndef(props.scrollTop)) {\n this.scrollerElement.scrollTop = props.scrollTop;\n }\n\n if (!isUndef(props.scrollLeft)) {\n this.scrollerElement.scrollLeft = props.scrollLeft;\n }\n\n this.update(true);\n };\n\n Scrollbar.prototype.componentWillUnmount = function () {\n Loop.removeTarget(this);\n };\n\n Scrollbar.prototype.componentDidUpdate = function (prevProps, prevState) {\n if (!this.scrollerElement) {\n return;\n }\n\n var props = this.props;\n\n if (props.rtl !== prevProps.rtl && props.rtl !== this.state.isRTL) {\n this.setState({\n isRTL: props.rtl\n });\n }\n\n if (this.state.isRTL !== prevState.isRTL) {\n this.update();\n }\n\n if (!isUndef(props.scrollTop) && props.scrollTop !== this.scrollerElement.scrollTop) {\n this.scrollerElement.scrollTop = props.scrollTop;\n }\n\n if (!isUndef(props.scrollLeft) && props.scrollLeft !== this.scrollerElement.scrollLeft) {\n this.scrollerElement.scrollLeft = props.scrollLeft;\n }\n\n if (prevProps.onUpdate !== props.onUpdate) {\n if (prevProps.onUpdate) this.eventEmitter.off('update', prevProps.onUpdate);\n if (props.onUpdate) this.eventEmitter.on('update', props.onUpdate);\n }\n\n if (prevProps.onScroll !== props.onScroll) {\n if (prevProps.onScroll) this.eventEmitter.off('scroll', prevProps.onScroll);\n if (props.onScroll) this.eventEmitter.on('scroll', props.onScroll);\n }\n\n if (prevProps.onScrollStart !== props.onScrollStart) {\n if (prevProps.onScrollStart) this.eventEmitter.off('scrollStart', prevProps.onScrollStart);\n if (props.onScrollStart) this.eventEmitter.on('scrollStart', props.onScrollStart);\n }\n\n if (prevProps.onScrollStop !== props.onScrollStop) {\n if (prevProps.onScrollStop) this.eventEmitter.off('scrollStop', prevProps.onScrollStop);\n if (props.onScrollStop) this.eventEmitter.on('scrollStop', props.onScrollStop);\n }\n }; // eslint-disable-next-line react/sort-comp\n\n\n Scrollbar.prototype.render = function () {\n var _a = this.props,\n createContext = _a.createContext,\n rtl = _a.rtl,\n native = _a.native,\n mobileNative = _a.mobileNative,\n momentum = _a.momentum;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.noDefaultStyles;\n var disableTracksMousewheelScrolling = _a.disableTracksMousewheelScrolling,\n disableTrackXMousewheelScrolling = _a.disableTrackXMousewheelScrolling,\n disableTrackYMousewheelScrolling = _a.disableTrackYMousewheelScrolling;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.disableTracksWidthCompensation;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.disableTrackXWidthCompensation;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.disableTrackYWidthCompensation;\n var noScrollX = _a.noScrollX,\n noScrollY = _a.noScrollY,\n noScroll = _a.noScroll,\n permanentTrackX = _a.permanentTrackX,\n permanentTrackY = _a.permanentTrackY,\n permanentTracks = _a.permanentTracks,\n removeTracksWhenNotUsed = _a.removeTracksWhenNotUsed,\n removeTrackYWhenNotUsed = _a.removeTrackYWhenNotUsed,\n removeTrackXWhenNotUsed = _a.removeTrackXWhenNotUsed;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.minimalThumbSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.maximalThumbSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.minimalThumbXSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.maximalThumbXSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.minimalThumbYSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.maximalThumbYSize;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.fallbackScrollbarWidth;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.scrollTop;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.scrollLeft;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.trackClickBehavior;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.scrollDetectionThreshold;\n var propsWrapperProps = _a.wrapperProps,\n propsScrollerProps = _a.scrollerProps,\n propsContentProps = _a.contentProps,\n propsTrackXProps = _a.trackXProps,\n propsTrackYProps = _a.trackYProps,\n propsThumbXProps = _a.thumbXProps,\n propsThumbYProps = _a.thumbYProps,\n propsScrollbarWidth = _a.scrollbarWidth;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.elementRef;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onUpdate;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onScroll;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onScrollStart;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.onScrollStop;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.translateContentSizesToHolder;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.translateContentSizeYToHolder;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _a.translateContentSizeXToHolder;\n var children = _a.children,\n propsHolderProps = __rest(_a, [\"createContext\", \"rtl\", \"native\", \"mobileNative\", \"momentum\", \"noDefaultStyles\", \"disableTracksMousewheelScrolling\", \"disableTrackXMousewheelScrolling\", \"disableTrackYMousewheelScrolling\", \"disableTracksWidthCompensation\", \"disableTrackXWidthCompensation\", \"disableTrackYWidthCompensation\", \"noScrollX\", \"noScrollY\", \"noScroll\", \"permanentTrackX\", \"permanentTrackY\", \"permanentTracks\", \"removeTracksWhenNotUsed\", \"removeTrackYWhenNotUsed\", \"removeTrackXWhenNotUsed\", \"minimalThumbSize\", \"maximalThumbSize\", \"minimalThumbXSize\", \"maximalThumbXSize\", \"minimalThumbYSize\", \"maximalThumbYSize\", \"fallbackScrollbarWidth\", \"scrollTop\", \"scrollLeft\", \"trackClickBehavior\", \"scrollDetectionThreshold\", \"wrapperProps\", \"scrollerProps\", \"contentProps\", \"trackXProps\", \"trackYProps\", \"thumbXProps\", \"thumbYProps\", \"scrollbarWidth\", \"elementRef\", \"onUpdate\", \"onScroll\", \"onScrollStart\", \"onScrollStop\", \"translateContentSizesToHolder\", \"translateContentSizeYToHolder\", \"translateContentSizeXToHolder\", \"children\"]);\n\n var scrollbarWidth = !isUndef(propsScrollbarWidth) ? propsScrollbarWidth : getScrollbarWidth() || 0;\n\n if (native || !scrollbarWidth && mobileNative) {\n this.elementRefHolder(null);\n this.elementRefWrapper(null);\n this.elementRefTrackX(null);\n this.elementRefTrackY(null);\n this.elementRefThumbX(null);\n this.elementRefThumbY(null);\n\n var contentProps_1 = __assign(__assign({}, propsContentProps), {\n key: 'ScrollbarsCustom-Content',\n className: cnb('ScrollbarsCustom-Content', propsContentProps.className),\n children: children\n });\n\n var scrollerProps_1 = __assign(__assign({}, propsHolderProps), {\n className: cnb('ScrollbarsCustom native', this.state.trackYVisible && 'trackYVisible', this.state.trackXVisible && 'trackXVisible', this.state.isRTL && 'rtl', propsHolderProps.className),\n style: __assign(__assign(__assign(__assign({}, propsHolderProps.style), !isUndef(rtl) && {\n direction: rtl ? 'rtl' : 'ltr'\n }), momentum && {\n WebkitOverflowScrolling: 'touch'\n }), {\n overflowX: noScroll || noScrollX ? 'hidden' : permanentTracks || permanentTrackX ? 'scroll' : 'auto',\n overflowY: noScroll || noScrollY ? 'hidden' : permanentTracks || permanentTrackY ? 'scroll' : 'auto'\n }),\n onScroll: this.handleScrollerScroll,\n children: renderDivWithRenderer(contentProps_1, this.elementRefContent),\n renderer: propsScrollerProps.renderer,\n elementRef: propsScrollerProps.elementRef\n });\n\n return renderDivWithRenderer(scrollerProps_1, this.elementRefScroller);\n }\n\n var styles = Scrollbar.calculateStyles(this.props, this.state, this.scrollValues, scrollbarWidth);\n var holderChildren = [];\n\n var contentProps = __assign(__assign({}, propsContentProps), {\n key: 'ScrollbarsCustom-Content',\n className: cnb('ScrollbarsCustom-Content', propsContentProps.className),\n style: styles.content,\n children: createContext ? // eslint-disable-next-line react/jsx-no-constructed-context-values\n React.createElement(ScrollbarContext.Provider, {\n value: {\n parentScrollbar: this\n }\n }, children) : children\n });\n\n var scrollerProps = __assign(__assign({}, propsScrollerProps), {\n key: 'ScrollbarsCustom-Scroller',\n className: cnb('ScrollbarsCustom-Scroller', propsScrollerProps.className),\n style: styles.scroller,\n children: renderDivWithRenderer(contentProps, this.elementRefContent),\n onScroll: this.handleScrollerScroll\n });\n\n var wrapperProps = __assign(__assign({}, propsWrapperProps), {\n key: 'ScrollbarsCustom-Wrapper',\n className: cnb('ScrollbarsCustom-Wrapper', propsWrapperProps.className),\n style: styles.wrapper,\n children: renderDivWithRenderer(scrollerProps, this.elementRefScroller)\n });\n\n holderChildren.push(renderDivWithRenderer(wrapperProps, this.elementRefWrapper));\n\n if (this.state.trackYVisible || !removeTracksWhenNotUsed && !removeTrackYWhenNotUsed) {\n var thumbYProps = __assign(__assign({}, propsThumbYProps), {\n key: 'ScrollbarsCustom-ThumbY',\n style: styles.thumbY,\n elementRef: this.elementRefThumbY,\n onDrag: this.handleThumbYDrag,\n onDragEnd: this.handleThumbYDragEnd,\n axis: AXIS_DIRECTION.Y\n });\n\n var trackYProps = __assign(__assign(__assign(__assign({}, propsTrackYProps), {\n key: 'ScrollbarsCustom-TrackY',\n style: styles.trackY,\n elementRef: this.elementRefTrackY,\n onClick: this.handleTrackYClick\n }), (disableTracksMousewheelScrolling || disableTrackYMousewheelScrolling) && {\n onWheel: this.handleTrackYMouseWheel\n }), {\n axis: AXIS_DIRECTION.Y\n });\n\n trackYProps.children = React.createElement(ScrollbarThumb, __assign({}, thumbYProps));\n holderChildren.push(React.createElement(ScrollbarTrack, __assign({}, trackYProps)));\n } else {\n this.elementRefTrackY(null);\n this.elementRefThumbY(null);\n }\n\n if (this.state.trackXVisible || !removeTracksWhenNotUsed && !removeTrackXWhenNotUsed) {\n var thumbXProps = __assign(__assign({}, propsThumbXProps), {\n key: 'ScrollbarsCustom-ThumbX',\n style: styles.thumbX,\n elementRef: this.elementRefThumbX,\n onDrag: this.handleThumbXDrag,\n onDragEnd: this.handleThumbXDragEnd,\n axis: AXIS_DIRECTION.X\n });\n\n var trackXProps = __assign(__assign(__assign(__assign({}, propsTrackXProps), {\n key: 'ScrollbarsCustom-TrackX',\n style: styles.trackX,\n elementRef: this.elementRefTrackX,\n onClick: this.handleTrackXClick\n }), (disableTracksMousewheelScrolling || disableTrackXMousewheelScrolling) && {\n onWheel: this.handleTrackXMouseWheel\n }), {\n axis: AXIS_DIRECTION.X\n });\n\n trackXProps.children = React.createElement(ScrollbarThumb, __assign({}, thumbXProps));\n holderChildren.push(React.createElement(ScrollbarTrack, __assign({}, trackXProps)));\n } else {\n this.elementRefTrackX(null);\n this.elementRefThumbX(null);\n }\n\n var holderProps = __assign(__assign({}, propsHolderProps), {\n className: cnb('ScrollbarsCustom', this.state.trackYVisible && 'trackYVisible', this.state.trackXVisible && 'trackXVisible', this.state.isRTL && 'rtl', propsHolderProps.className),\n style: styles.holder,\n children: holderChildren\n });\n\n return renderDivWithRenderer(holderProps, this.elementRefHolder);\n }; // eslint-disable-next-line react/static-property-placement\n\n\n Scrollbar.contextType = ScrollbarContext; // eslint-disable-next-line react/static-property-placement\n\n Scrollbar.defaultProps = {\n momentum: true,\n minimalThumbSize: 30,\n fallbackScrollbarWidth: 20,\n trackClickBehavior: TRACK_CLICK_BEHAVIOR.JUMP,\n scrollDetectionThreshold: 100,\n wrapperProps: {},\n scrollerProps: {},\n contentProps: {},\n trackXProps: {},\n trackYProps: {},\n thumbXProps: {},\n thumbYProps: {}\n };\n return Scrollbar;\n}(React.Component);\n\nexport { Scrollbar, ScrollbarContext, Scrollbar as default };\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\nmodule.exports = function () {\n var selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n var active = document.activeElement;\n\n var ranges = [];\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' &&\n selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function(range) {\n selection.addRange(range);\n });\n }\n\n active &&\n active.focus();\n };\n};\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s,\n _e,\n _x,\n _r,\n _arr = [],\n _n = !0,\n _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0);\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i[\"return\"] && (_r = _i[\"return\"](), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableRest();\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import ke, { useState as B, useEffect as Ae, useRef as Se } from \"react\";\nimport { fabric as $ } from \"fabric\";\nconst Y = \"#000000\", re = \"rgba(255, 255, 255, 0.0)\", br = {\n radius: 20,\n left: 100,\n top: 100,\n fill: re,\n stroke: Y\n}, Er = {\n left: 100,\n top: 100,\n fill: re,\n stroke: Y,\n width: 40,\n height: 40,\n angle: 0\n}, we = {\n points: [50, 100, 200, 200],\n options: {\n left: 170,\n top: 150,\n stroke: Y\n }\n}, ee = {\n type: \"text\",\n left: 100,\n top: 100,\n fontSize: 16,\n fontFamily: \"Arial\",\n fill: Y\n}, gr = (i, h, m, y, p, _) => ({\n canvas: i,\n addCircle: () => {\n const a = new $.Circle({\n ...br,\n fill: h,\n stroke: m\n });\n i.add(a);\n },\n addRectangle: () => {\n const a = new $.Rect({\n ...Er,\n fill: h,\n stroke: m\n });\n i.add(a);\n },\n addLine: () => {\n const a = new $.Line(we.points, {\n ...we.options,\n stroke: m\n });\n i.add(a);\n },\n addText: (a) => {\n const c = new $.Textbox(a, {\n ...ee,\n fill: m\n });\n c.set({\n text: a\n }), i.add(c);\n },\n updateText: (a) => {\n const c = i.getActiveObjects();\n c.length && c[0].type === ee.type && (c[0].set({\n text: a\n }), i.renderAll());\n },\n deleteAll: () => {\n i.getObjects().forEach((a) => i.remove(a)), i.discardActiveObject(), i.renderAll();\n },\n deleteSelected: () => {\n i.getActiveObjects().forEach((a) => i.remove(a)), i.discardActiveObject(), i.renderAll();\n },\n fillColor: h,\n strokeColor: m,\n setFillColor: (a) => {\n y(a), i.getActiveObjects().forEach((c) => c.set({\n fill: a\n })), i.renderAll();\n },\n setStrokeColor: (a) => {\n p(a), i.getActiveObjects().forEach((c) => {\n if (c.type === ee.type) {\n c.set({\n fill: a\n });\n return;\n }\n c.set({\n stroke: a\n });\n }), i.renderAll();\n },\n zoomIn: () => {\n const a = i.getZoom();\n i.setZoom(a / _);\n },\n zoomOut: () => {\n const a = i.getZoom();\n i.setZoom(a * _);\n }\n}), _r = (i = {}) => {\n const h = i.scaleStep || 0.5, {\n defaultFillColor: m,\n defaultStrokeColor: y\n } = i, [p, _] = B(null), [a, c] = B(m || re), [f, w] = B(y || Y), [b, R] = B([]);\n return Ae(() => {\n p && ((j) => {\n j.on(\"selection:cleared\", () => {\n R([]);\n }), j.on(\"selection:created\", (x) => {\n R(x.selected);\n }), j.on(\"selection:updated\", (x) => {\n R(x.selected);\n });\n })(p);\n }, [p]), {\n selectedObjects: b,\n onReady: (O) => {\n console.log(\"Fabric canvas ready\"), _(O);\n },\n editor: p ? gr(p, a, f, c, w, h) : void 0\n };\n};\nvar Fe = { exports: {} }, L = {};\n/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar je;\nfunction hr() {\n if (je)\n return L;\n je = 1;\n var i = ke, h = Symbol.for(\"react.element\"), m = Symbol.for(\"react.fragment\"), y = Object.prototype.hasOwnProperty, p = i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, _ = { key: !0, ref: !0, __self: !0, __source: !0 };\n function a(c, f, w) {\n var b, R = {}, O = null, j = null;\n w !== void 0 && (O = \"\" + w), f.key !== void 0 && (O = \"\" + f.key), f.ref !== void 0 && (j = f.ref);\n for (b in f)\n y.call(f, b) && !_.hasOwnProperty(b) && (R[b] = f[b]);\n if (c && c.defaultProps)\n for (b in f = c.defaultProps, f)\n R[b] === void 0 && (R[b] = f[b]);\n return { $$typeof: h, type: c, key: O, ref: j, props: R, _owner: p.current };\n }\n return L.Fragment = m, L.jsx = a, L.jsxs = a, L;\n}\nvar W = {};\n/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar Pe;\nfunction mr() {\n return Pe || (Pe = 1, process.env.NODE_ENV !== \"production\" && function() {\n var i = ke, h = Symbol.for(\"react.element\"), m = Symbol.for(\"react.portal\"), y = Symbol.for(\"react.fragment\"), p = Symbol.for(\"react.strict_mode\"), _ = Symbol.for(\"react.profiler\"), a = Symbol.for(\"react.provider\"), c = Symbol.for(\"react.context\"), f = Symbol.for(\"react.forward_ref\"), w = Symbol.for(\"react.suspense\"), b = Symbol.for(\"react.suspense_list\"), R = Symbol.for(\"react.memo\"), O = Symbol.for(\"react.lazy\"), j = Symbol.for(\"react.offscreen\"), x = Symbol.iterator, De = \"@@iterator\";\n function Ie(e) {\n if (e === null || typeof e != \"object\")\n return null;\n var r = x && e[x] || e[De];\n return typeof r == \"function\" ? r : null;\n }\n var k = i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n function E(e) {\n {\n for (var r = arguments.length, t = new Array(r > 1 ? r - 1 : 0), n = 1; n < r; n++)\n t[n - 1] = arguments[n];\n Le(\"error\", e, t);\n }\n }\n function Le(e, r, t) {\n {\n var n = k.ReactDebugCurrentFrame, u = n.getStackAddendum();\n u !== \"\" && (r += \"%s\", t = t.concat([u]));\n var l = t.map(function(s) {\n return String(s);\n });\n l.unshift(\"Warning: \" + r), Function.prototype.apply.call(console[e], console, l);\n }\n }\n var We = !1, $e = !1, Ye = !1, Ne = !1, Ve = !1, te;\n te = Symbol.for(\"react.module.reference\");\n function Me(e) {\n return !!(typeof e == \"string\" || typeof e == \"function\" || e === y || e === _ || Ve || e === p || e === w || e === b || Ne || e === j || We || $e || Ye || typeof e == \"object\" && e !== null && (e.$$typeof === O || e.$$typeof === R || e.$$typeof === a || e.$$typeof === c || e.$$typeof === f || e.$$typeof === te || e.getModuleId !== void 0));\n }\n function Ue(e, r, t) {\n var n = e.displayName;\n if (n)\n return n;\n var u = r.displayName || r.name || \"\";\n return u !== \"\" ? t + \"(\" + u + \")\" : t;\n }\n function ne(e) {\n return e.displayName || \"Context\";\n }\n function C(e) {\n if (e == null)\n return null;\n if (typeof e.tag == \"number\" && E(\"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"), typeof e == \"function\")\n return e.displayName || e.name || null;\n if (typeof e == \"string\")\n return e;\n switch (e) {\n case y:\n return \"Fragment\";\n case m:\n return \"Portal\";\n case _:\n return \"Profiler\";\n case p:\n return \"StrictMode\";\n case w:\n return \"Suspense\";\n case b:\n return \"SuspenseList\";\n }\n if (typeof e == \"object\")\n switch (e.$$typeof) {\n case c:\n var r = e;\n return ne(r) + \".Consumer\";\n case a:\n var t = e;\n return ne(t._context) + \".Provider\";\n case f:\n return Ue(e, e.render, \"ForwardRef\");\n case R:\n var n = e.displayName || null;\n return n !== null ? n : C(e.type) || \"Memo\";\n case O: {\n var u = e, l = u._payload, s = u._init;\n try {\n return C(s(l));\n } catch {\n return null;\n }\n }\n }\n return null;\n }\n var P = Object.assign, D = 0, ae, oe, ie, se, ue, le, ce;\n function fe() {\n }\n fe.__reactDisabledLog = !0;\n function ze() {\n {\n if (D === 0) {\n ae = console.log, oe = console.info, ie = console.warn, se = console.error, ue = console.group, le = console.groupCollapsed, ce = console.groupEnd;\n var e = {\n configurable: !0,\n enumerable: !0,\n value: fe,\n writable: !0\n };\n Object.defineProperties(console, {\n info: e,\n log: e,\n warn: e,\n error: e,\n group: e,\n groupCollapsed: e,\n groupEnd: e\n });\n }\n D++;\n }\n }\n function Be() {\n {\n if (D--, D === 0) {\n var e = {\n configurable: !0,\n enumerable: !0,\n writable: !0\n };\n Object.defineProperties(console, {\n log: P({}, e, {\n value: ae\n }),\n info: P({}, e, {\n value: oe\n }),\n warn: P({}, e, {\n value: ie\n }),\n error: P({}, e, {\n value: se\n }),\n group: P({}, e, {\n value: ue\n }),\n groupCollapsed: P({}, e, {\n value: le\n }),\n groupEnd: P({}, e, {\n value: ce\n })\n });\n }\n D < 0 && E(\"disabledDepth fell below zero. This is a bug in React. Please file an issue.\");\n }\n }\n var J = k.ReactCurrentDispatcher, q;\n function N(e, r, t) {\n {\n if (q === void 0)\n try {\n throw Error();\n } catch (u) {\n var n = u.stack.trim().match(/\\n( *(at )?)/);\n q = n && n[1] || \"\";\n }\n return `\n` + q + e;\n }\n }\n var G = !1, V;\n {\n var Je = typeof WeakMap == \"function\" ? WeakMap : Map;\n V = new Je();\n }\n function de(e, r) {\n if (!e || G)\n return \"\";\n {\n var t = V.get(e);\n if (t !== void 0)\n return t;\n }\n var n;\n G = !0;\n var u = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n var l;\n l = J.current, J.current = null, ze();\n try {\n if (r) {\n var s = function() {\n throw Error();\n };\n if (Object.defineProperty(s.prototype, \"props\", {\n set: function() {\n throw Error();\n }\n }), typeof Reflect == \"object\" && Reflect.construct) {\n try {\n Reflect.construct(s, []);\n } catch (S) {\n n = S;\n }\n Reflect.construct(e, [], s);\n } else {\n try {\n s.call();\n } catch (S) {\n n = S;\n }\n e.call(s.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (S) {\n n = S;\n }\n e();\n }\n } catch (S) {\n if (S && n && typeof S.stack == \"string\") {\n for (var o = S.stack.split(`\n`), g = n.stack.split(`\n`), d = o.length - 1, v = g.length - 1; d >= 1 && v >= 0 && o[d] !== g[v]; )\n v--;\n for (; d >= 1 && v >= 0; d--, v--)\n if (o[d] !== g[v]) {\n if (d !== 1 || v !== 1)\n do\n if (d--, v--, v < 0 || o[d] !== g[v]) {\n var T = `\n` + o[d].replace(\" at new \", \" at \");\n return e.displayName && T.includes(\"\") && (T = T.replace(\"\", e.displayName)), typeof e == \"function\" && V.set(e, T), T;\n }\n while (d >= 1 && v >= 0);\n break;\n }\n }\n } finally {\n G = !1, J.current = l, Be(), Error.prepareStackTrace = u;\n }\n var F = e ? e.displayName || e.name : \"\", Ce = F ? N(F) : \"\";\n return typeof e == \"function\" && V.set(e, Ce), Ce;\n }\n function qe(e, r, t) {\n return de(e, !1);\n }\n function Ge(e) {\n var r = e.prototype;\n return !!(r && r.isReactComponent);\n }\n function M(e, r, t) {\n if (e == null)\n return \"\";\n if (typeof e == \"function\")\n return de(e, Ge(e));\n if (typeof e == \"string\")\n return N(e);\n switch (e) {\n case w:\n return N(\"Suspense\");\n case b:\n return N(\"SuspenseList\");\n }\n if (typeof e == \"object\")\n switch (e.$$typeof) {\n case f:\n return qe(e.render);\n case R:\n return M(e.type, r, t);\n case O: {\n var n = e, u = n._payload, l = n._init;\n try {\n return M(l(u), r, t);\n } catch {\n }\n }\n }\n return \"\";\n }\n var U = Object.prototype.hasOwnProperty, ve = {}, pe = k.ReactDebugCurrentFrame;\n function z(e) {\n if (e) {\n var r = e._owner, t = M(e.type, e._source, r ? r.type : null);\n pe.setExtraStackFrame(t);\n } else\n pe.setExtraStackFrame(null);\n }\n function He(e, r, t, n, u) {\n {\n var l = Function.call.bind(U);\n for (var s in e)\n if (l(e, s)) {\n var o = void 0;\n try {\n if (typeof e[s] != \"function\") {\n var g = Error((n || \"React class\") + \": \" + t + \" type `\" + s + \"` is invalid; it must be a function, usually from the `prop-types` package, but received `\" + typeof e[s] + \"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");\n throw g.name = \"Invariant Violation\", g;\n }\n o = e[s](r, s, n, t, null, \"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\");\n } catch (d) {\n o = d;\n }\n o && !(o instanceof Error) && (z(u), E(\"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).\", n || \"React class\", t, s, typeof o), z(null)), o instanceof Error && !(o.message in ve) && (ve[o.message] = !0, z(u), E(\"Failed %s type: %s\", t, o.message), z(null));\n }\n }\n }\n var Ke = Array.isArray;\n function H(e) {\n return Ke(e);\n }\n function Ze(e) {\n {\n var r = typeof Symbol == \"function\" && Symbol.toStringTag, t = r && e[Symbol.toStringTag] || e.constructor.name || \"Object\";\n return t;\n }\n }\n function Xe(e) {\n try {\n return be(e), !1;\n } catch {\n return !0;\n }\n }\n function be(e) {\n return \"\" + e;\n }\n function Ee(e) {\n if (Xe(e))\n return E(\"The provided key is an unsupported type %s. This value must be coerced to a string before before using it here.\", Ze(e)), be(e);\n }\n var I = k.ReactCurrentOwner, Qe = {\n key: !0,\n ref: !0,\n __self: !0,\n __source: !0\n }, ge, he, K;\n K = {};\n function er(e) {\n if (U.call(e, \"ref\")) {\n var r = Object.getOwnPropertyDescriptor(e, \"ref\").get;\n if (r && r.isReactWarning)\n return !1;\n }\n return e.ref !== void 0;\n }\n function rr(e) {\n if (U.call(e, \"key\")) {\n var r = Object.getOwnPropertyDescriptor(e, \"key\").get;\n if (r && r.isReactWarning)\n return !1;\n }\n return e.key !== void 0;\n }\n function tr(e, r) {\n if (typeof e.ref == \"string\" && I.current && r && I.current.stateNode !== r) {\n var t = C(I.current.type);\n K[t] || (E('Component \"%s\" contains the string ref \"%s\". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref', C(I.current.type), e.ref), K[t] = !0);\n }\n }\n function nr(e, r) {\n {\n var t = function() {\n ge || (ge = !0, E(\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", r));\n };\n t.isReactWarning = !0, Object.defineProperty(e, \"key\", {\n get: t,\n configurable: !0\n });\n }\n }\n function ar(e, r) {\n {\n var t = function() {\n he || (he = !0, E(\"%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", r));\n };\n t.isReactWarning = !0, Object.defineProperty(e, \"ref\", {\n get: t,\n configurable: !0\n });\n }\n }\n var or = function(e, r, t, n, u, l, s) {\n var o = {\n $$typeof: h,\n type: e,\n key: r,\n ref: t,\n props: s,\n _owner: l\n };\n return o._store = {}, Object.defineProperty(o._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: !1\n }), Object.defineProperty(o, \"_self\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: n\n }), Object.defineProperty(o, \"_source\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: u\n }), Object.freeze && (Object.freeze(o.props), Object.freeze(o)), o;\n };\n function ir(e, r, t, n, u) {\n {\n var l, s = {}, o = null, g = null;\n t !== void 0 && (Ee(t), o = \"\" + t), rr(r) && (Ee(r.key), o = \"\" + r.key), er(r) && (g = r.ref, tr(r, u));\n for (l in r)\n U.call(r, l) && !Qe.hasOwnProperty(l) && (s[l] = r[l]);\n if (e && e.defaultProps) {\n var d = e.defaultProps;\n for (l in d)\n s[l] === void 0 && (s[l] = d[l]);\n }\n if (o || g) {\n var v = typeof e == \"function\" ? e.displayName || e.name || \"Unknown\" : e;\n o && nr(s, v), g && ar(s, v);\n }\n return or(e, o, g, u, n, I.current, s);\n }\n }\n var Z = k.ReactCurrentOwner, me = k.ReactDebugCurrentFrame;\n function A(e) {\n if (e) {\n var r = e._owner, t = M(e.type, e._source, r ? r.type : null);\n me.setExtraStackFrame(t);\n } else\n me.setExtraStackFrame(null);\n }\n var X;\n X = !1;\n function Q(e) {\n return typeof e == \"object\" && e !== null && e.$$typeof === h;\n }\n function ye() {\n {\n if (Z.current) {\n var e = C(Z.current.type);\n if (e)\n return `\n\nCheck the render method of \\`` + e + \"`.\";\n }\n return \"\";\n }\n }\n function sr(e) {\n {\n if (e !== void 0) {\n var r = e.fileName.replace(/^.*[\\\\\\/]/, \"\"), t = e.lineNumber;\n return `\n\nCheck your code at ` + r + \":\" + t + \".\";\n }\n return \"\";\n }\n }\n var Re = {};\n function ur(e) {\n {\n var r = ye();\n if (!r) {\n var t = typeof e == \"string\" ? e : e.displayName || e.name;\n t && (r = `\n\nCheck the top-level render call using <` + t + \">.\");\n }\n return r;\n }\n }\n function _e(e, r) {\n {\n if (!e._store || e._store.validated || e.key != null)\n return;\n e._store.validated = !0;\n var t = ur(r);\n if (Re[t])\n return;\n Re[t] = !0;\n var n = \"\";\n e && e._owner && e._owner !== Z.current && (n = \" It was passed a child from \" + C(e._owner.type) + \".\"), A(e), E('Each child in a list should have a unique \"key\" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', t, n), A(null);\n }\n }\n function Te(e, r) {\n {\n if (typeof e != \"object\")\n return;\n if (H(e))\n for (var t = 0; t < e.length; t++) {\n var n = e[t];\n Q(n) && _e(n, r);\n }\n else if (Q(e))\n e._store && (e._store.validated = !0);\n else if (e) {\n var u = Ie(e);\n if (typeof u == \"function\" && u !== e.entries)\n for (var l = u.call(e), s; !(s = l.next()).done; )\n Q(s.value) && _e(s.value, r);\n }\n }\n }\n function lr(e) {\n {\n var r = e.type;\n if (r == null || typeof r == \"string\")\n return;\n var t;\n if (typeof r == \"function\")\n t = r.propTypes;\n else if (typeof r == \"object\" && (r.$$typeof === f || r.$$typeof === R))\n t = r.propTypes;\n else\n return;\n if (t) {\n var n = C(r);\n He(t, e.props, \"prop\", n, e);\n } else if (r.PropTypes !== void 0 && !X) {\n X = !0;\n var u = C(r);\n E(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\", u || \"Unknown\");\n }\n typeof r.getDefaultProps == \"function\" && !r.getDefaultProps.isReactClassApproved && E(\"getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.\");\n }\n }\n function cr(e) {\n {\n for (var r = Object.keys(e.props), t = 0; t < r.length; t++) {\n var n = r[t];\n if (n !== \"children\" && n !== \"key\") {\n A(e), E(\"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\", n), A(null);\n break;\n }\n }\n e.ref !== null && (A(e), E(\"Invalid attribute `ref` supplied to `React.Fragment`.\"), A(null));\n }\n }\n function Oe(e, r, t, n, u, l) {\n {\n var s = Me(e);\n if (!s) {\n var o = \"\";\n (e === void 0 || typeof e == \"object\" && e !== null && Object.keys(e).length === 0) && (o += \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\");\n var g = sr(u);\n g ? o += g : o += ye();\n var d;\n e === null ? d = \"null\" : H(e) ? d = \"array\" : e !== void 0 && e.$$typeof === h ? (d = \"<\" + (C(e.type) || \"Unknown\") + \" />\", o = \" Did you accidentally export a JSX literal instead of a component?\") : d = typeof e, E(\"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\", d, o);\n }\n var v = ir(e, r, t, u, l);\n if (v == null)\n return v;\n if (s) {\n var T = r.children;\n if (T !== void 0)\n if (n)\n if (H(T)) {\n for (var F = 0; F < T.length; F++)\n Te(T[F], e);\n Object.freeze && Object.freeze(T);\n } else\n E(\"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\");\n else\n Te(T, e);\n }\n return e === y ? cr(v) : lr(v), v;\n }\n }\n function fr(e, r, t) {\n return Oe(e, r, t, !0);\n }\n function dr(e, r, t) {\n return Oe(e, r, t, !1);\n }\n var vr = dr, pr = fr;\n W.Fragment = y, W.jsx = vr, W.jsxs = pr;\n }()), W;\n}\n(function(i) {\n process.env.NODE_ENV === \"production\" ? i.exports = hr() : i.exports = mr();\n})(Fe);\nconst xe = Fe.exports.jsx, Tr = ({\n className: i,\n onReady: h\n}) => {\n const m = Se(null), y = Se(null);\n return Ae(() => {\n const p = new $.Canvas(m.current), _ = () => {\n var c, f;\n p.setHeight(((c = y.current) == null ? void 0 : c.clientHeight) || 0), p.setWidth(((f = y.current) == null ? void 0 : f.clientWidth) || 0), p.renderAll();\n }, a = () => {\n _();\n };\n return _(), window.addEventListener(\"resize\", a, !1), h && h(p), () => {\n p.dispose(), window.removeEventListener(\"resize\", a);\n };\n }, []), /* @__PURE__ */ xe(\"div\", {\n ref: y,\n className: i,\n children: /* @__PURE__ */ xe(\"canvas\", {\n ref: m\n })\n });\n};\nexport {\n Tr as FabricJSCanvas,\n _r as useFabricJSEditor\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + {\"135\":\"8ce705ab\",\"200\":\"1094ee7a\",\"236\":\"8ccd6456\",\"305\":\"ebe7c14e\",\"324\":\"7655f9a5\",\"357\":\"14f44006\",\"402\":\"df4f1f39\",\"440\":\"c1781783\",\"447\":\"7e3a4e99\",\"460\":\"1e0cd28a\",\"550\":\"6c7c99f1\",\"553\":\"0a215d07\",\"573\":\"9e19a951\",\"624\":\"52b3b67a\",\"678\":\"46737b17\",\"694\":\"8026f080\",\"699\":\"70efbcc9\",\"716\":\"6b472c56\",\"717\":\"3c18222d\",\"776\":\"b81076f5\",\"787\":\"134629b3\",\"792\":\"c6e0e83e\",\"879\":\"36df52d8\",\"892\":\"bb8d285c\",\"969\":\"d312d3b6\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"135\":\"08aa511c\",\"200\":\"09b9ac68\",\"305\":\"9f35dd2c\",\"324\":\"e533525e\",\"357\":\"aeda06b8\",\"402\":\"0589c635\",\"440\":\"4d923a56\",\"447\":\"ccd9a04f\",\"460\":\"0cbbd622\",\"550\":\"98d77805\",\"553\":\"a3eba997\",\"573\":\"a3978771\",\"678\":\"b12bef00\",\"694\":\"6a272846\",\"699\":\"a0f4af36\",\"716\":\"2c3ad309\",\"776\":\"a142e526\",\"792\":\"55246208\",\"879\":\"679853d7\",\"892\":\"153cf552\"}[chunkId] + \".chunk.css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var inProgress = {};\nvar dataWebpackPrefix = \"product_customizer:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// 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};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"135\":1,\"200\":1,\"305\":1,\"324\":1,\"357\":1,\"402\":1,\"440\":1,\"447\":1,\"460\":1,\"550\":1,\"553\":1,\"573\":1,\"678\":1,\"694\":1,\"699\":1,\"716\":1,\"776\":1,\"792\":1,\"879\":1,\"892\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkproduct_customizer\"] = self[\"webpackChunkproduct_customizer\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: any;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. May be either a URL or the pieces of a\n * URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nfunction warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: any;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n status: number;\n location: string;\n revalidate: boolean;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: any;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\nexport type MutationFormMethod = \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type FormMethod = \"get\" | MutationFormMethod;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\";\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport interface Submission {\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n}\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: any;\n}\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs extends DataFunctionArgs {}\n\n/**\n * Route loader function signature\n */\nexport interface LoaderFunction {\n (args: LoaderFunctionArgs): Promise | Response | Promise | any;\n}\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (args: ActionFunctionArgs): Promise | Response | Promise | any;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n formData?: Submission[\"formData\"];\n actionResult?: DataResult;\n defaultShouldRevalidate: boolean;\n }): boolean;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction;\n action?: ActionFunction;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\ntype PathParam =\n // check if path is just a wildcard\n Path extends \"*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n parentPath: number[] = [],\n allIds: Set = new Set()\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, index];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !allIds.has(id),\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n allIds.add(id);\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = { ...route, id };\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n id,\n children: route.children\n ? convertRoutesToDataRoutes(route.children, treePath, allIds)\n : undefined,\n };\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n matches = matchRouteBranch(\n branches[i],\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n safelyDecodeURI(pathname)\n );\n }\n\n return matches;\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explodes _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:\\w+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n if (!match) return null;\n\n Object.assign(matchedParams, match.params);\n\n let route = meta.route;\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n return (\n path\n .replace(\n /^:(\\w+)(\\??)/g,\n (_, key: PathParam, optional: string | undefined) => {\n let param = params[key];\n if (optional === \"?\") {\n return param == null ? \"\" : param;\n }\n if (param == null) {\n invariant(false, `Missing \":${key}\" param`);\n }\n return param;\n }\n )\n .replace(\n /\\/:(\\w+)(\\??)/g,\n (_, key: PathParam, optional: string | undefined) => {\n let param = params[key];\n if (optional === \"?\") {\n return param == null ? \"\" : `/${param}`;\n }\n if (param == null) {\n invariant(false, `Missing \":${key}\" param`);\n }\n return `/${param}`;\n }\n )\n // Remove any optional markers from optional static segments\n .replace(/\\?/g, \"\")\n .replace(/(\\/?)\\*/, (_, prefix, __, str) => {\n const star = \"*\" as PathParam;\n\n if (params[star] == null) {\n // If no splat was provided, trim the trailing slash _unless_ it's\n // the entire path\n return str === \"/*\" ? \"/\" : \"\";\n }\n\n // Apply the splat\n return `${prefix}${params[star]}`;\n })\n );\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, paramNames] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = paramNames.reduce>(\n (memo, paramName, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n memo[paramName] = safelyDecodeURIComponent(\n captureGroups[index] || \"\",\n paramName\n );\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, string[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let paramNames: string[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^$?{}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(/\\/:(\\w+)/g, (_: string, paramName: string) => {\n paramNames.push(paramName);\n return \"/([^\\\\/]+)\";\n });\n\n if (path.endsWith(\"*\")) {\n paramNames.push(\"*\");\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, paramNames];\n}\n\nfunction safelyDecodeURI(value: string) {\n try {\n return decodeURI(value);\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\nfunction safelyDecodeURIComponent(value: string, paramName: string) {\n try {\n return decodeURIComponent(value);\n } catch (error) {\n warning(\n false,\n `The value for the URL param \"${paramName}\" will not be decoded because` +\n ` the string \"${value}\" is a malformed URL segment. This is probably` +\n ` due to a bad percent encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * @private\n */\nexport function warning(cond: any, message: string): void {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging @remix-run/router!\n //\n // This error is thrown as a convenience so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (isPathRelative || toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n if (toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n // Each leading .. segment means \"go up one route\" instead of \"go up one\n // URL segment\". This is a key difference from how works and a\n // major reason we call this a \"to\" value instead of a \"href\".\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n // If there are more \"..\" segments than parent routes, resolve relative to\n // the root / URL.\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, null, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n if (error) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n */\nexport class ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n error?: Error;\n internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n} from \"./history\";\nimport type {\n DataResult,\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DeferredResult,\n ErrorResult,\n FormEncType,\n FormMethod,\n RedirectResult,\n RouteData,\n AgnosticRouteObject,\n Submission,\n SuccessResult,\n AgnosticRouteMatch,\n MutationFormMethod,\n ShouldRevalidateFunction,\n} from \"./utils\";\nimport {\n DeferredData,\n ErrorResponse,\n ResultType,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n resolveTo,\n warning,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string,\n opts?: RouterNavigateOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key?: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key?: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n basename?: string;\n routes: AgnosticRouteObject[];\n history: History;\n hydrationData?: HydrationState;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: { requestContext?: unknown }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: { routeId?: string; requestContext?: unknown }\n ): Promise;\n}\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (state: RouterState): void;\n}\n\ninterface UseMatchesMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: unknown;\n handle: unknown;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UseMatchesMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\n/**\n * Options for a navigate() call for a Link navigation\n */\ntype LinkNavigateOptions = {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n};\n\n/**\n * Options for a navigate() call for a Form navigation\n */\ntype SubmissionNavigateOptions = {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n formMethod?: FormMethod;\n formEncType?: FormEncType;\n formData: FormData;\n};\n\n/**\n * Options to pass to navigate() for either a Link or Form navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions =\n | Omit\n | Omit;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: FormMethod | undefined;\n formAction: string | undefined;\n formEncType: FormEncType | undefined;\n formData: FormData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Loading: {\n state: \"loading\";\n formMethod: FormMethod | undefined;\n formAction: string | undefined;\n formEncType: FormEncType | undefined;\n formData: FormData | undefined;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n data: TData | undefined;\n \" _hasFetcherDoneAnything \"?: boolean;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Error thrown from the current action, keyed by the route containing the\n * error boundary to render the error. To be committed to the state after\n * loaders have completed\n */\n pendingActionError?: RouteData;\n /**\n * Data returned from the current action, keyed by the route owning the action.\n * To be committed to the state after loaders have completed\n */\n pendingActionData?: RouteData;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n match: AgnosticDataRouteMatch;\n matches: AgnosticDataRouteMatch[];\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n}\n\n/**\n * Wrapper object to allow us to throw any response out from callLoaderOrAction\n * for queryRouter while preserving whether or not it was thrown or returned\n * from the loader/action\n */\ninterface QueryRouteResponse {\n type: ResultType.data | ResultType.error;\n response: Response;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst isBrowser =\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\";\nconst isServer = !isBrowser;\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let dataRoutes = convertRoutesToDataRoutes(init.routes);\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(\n dataRoutes,\n init.history.location,\n init.basename\n );\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n let initialized =\n !initialMatches.some((m) => m.route.loader) || init.hydrationData != null;\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidate()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: string[] = [];\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations from their actions\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n deleteBlocker(blockerKey!);\n updateState({ blockers: new Map(router.state.blockers) });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location);\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(newState: Partial): void {\n state = {\n ...state,\n ...newState,\n };\n subscribers.forEach((subscriber) => subscriber(state));\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n for (let [key] of blockerFunctions) {\n deleteBlocker(key);\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n updateState({\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers: new Map(state.blockers),\n });\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n cancelledFetcherLoads = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(to, opts);\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n deleteBlocker(blockerKey!);\n updateState({ blockers: new Map(state.blockers) });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n submission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponse;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(dataRoutes, location, init.basename);\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n completeNavigation(location, {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n });\n return;\n }\n\n // Short circuit if it's only a hash change and not a mutation submission\n // For example, on /page#hash and submit a
which will\n // default to a navigation to /page\n if (\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionData: RouteData | undefined;\n let pendingError: RouteData | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingError = {\n [findNearestBoundary(matches).route.id]: opts.pendingError,\n };\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionOutput = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n { replace: opts.replace }\n );\n\n if (actionOutput.shortCircuited) {\n return;\n }\n\n pendingActionData = actionOutput.pendingActionData;\n pendingError = actionOutput.pendingActionError;\n\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n ...opts.submission,\n };\n loadingNavigation = navigation;\n\n // Create a GET request for the loaders\n request = new Request(request.url, { signal: request.signal });\n }\n\n // Call loaders\n let { shortCircuited, loaderData, errors } = await handleLoaders(\n request,\n location,\n matches,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.replace,\n pendingActionData,\n pendingError\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n opts?: { replace?: boolean }\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n ...submission,\n };\n updateState({ navigation });\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n router.basename\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n replace =\n result.location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(state, result, { submission, replace });\n return { shortCircuited: true };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions are REPLACE navigations, but if the\n // action threw an error that'll be rendered in an errorElement, we fall\n // back to PUSH so that the user can use the back button to get back to\n // the pre-submission form location to try again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n // Send back an empty object we can use to clear out any prior actionData\n pendingActionData: {},\n pendingActionError: { [boundaryMatch.route.id]: result.error },\n };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n return {\n pendingActionData: { [actionMatch.route.id]: result.data },\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n overrideNavigation?: Navigation,\n submission?: Submission,\n replace?: boolean,\n pendingActionData?: RouteData,\n pendingError?: RouteData\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation = overrideNavigation;\n if (!loadingNavigation) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n ...submission,\n };\n loadingNavigation = navigation;\n }\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission = submission\n ? submission\n : loadingNavigation.formMethod &&\n loadingNavigation.formAction &&\n loadingNavigation.formData &&\n loadingNavigation.formEncType\n ? {\n formMethod: loadingNavigation.formMethod,\n formAction: loadingNavigation.formAction,\n formData: loadingNavigation.formData,\n formEncType: loadingNavigation.formEncType,\n }\n : undefined;\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n pendingActionData,\n pendingError,\n fetchLoadMatches\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n completeNavigation(location, {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors: pendingError || null,\n ...(pendingActionData ? { actionData: pendingActionData } : {}),\n });\n return { shortCircuited: true };\n }\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n if (!isUninterruptedRevalidation) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: fetcher && fetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n let actionData = pendingActionData || state.actionData;\n updateState({\n navigation: loadingNavigation,\n ...(actionData\n ? Object.keys(actionData).length === 0\n ? { actionData: null }\n : { actionData }\n : {}),\n ...(revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n });\n }\n\n pendingNavigationLoadId = ++incrementingLoadId;\n revalidatingFetchers.forEach((rf) =>\n fetchControllers.set(rf.key, pendingNavigationController!)\n );\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect(results);\n if (redirect) {\n await startRedirectNavigation(state, redirect, { replace });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingError,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n\n return {\n loaderData,\n errors,\n ...(didAbortFetchLoads || revalidatingFetchers.length > 0\n ? { fetchers: new Map(state.fetchers) }\n : {}),\n };\n }\n\n function getFetcher(key: string): Fetcher {\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n\n let matches = matchRoutes(dataRoutes, href, init.basename);\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: href })\n );\n return;\n }\n\n let { path, submission } = normalizeNavigateOptions(href, opts, true);\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(key, routeId, path, match, matches, submission);\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path, match, matches });\n handleFetcherLoader(key, routeId, path, match, matches, submission);\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n if (!match.route.action) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error);\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n ...submission,\n data: existingFetcher && existingFetcher.data,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, fetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the action for the fetcher\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n fetchControllers.set(key, abortController);\n\n let actionResult = await callLoaderOrAction(\n \"action\",\n fetchRequest,\n match,\n requestMatches,\n router.basename\n );\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by ou our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n fetchRedirectIds.add(key);\n let loadingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n ...submission,\n data: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n return startRedirectNavigation(state, actionResult, {\n isFetchActionRedirect: true,\n });\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n\n nextLocation,\n abortController.signal\n );\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(dataRoutes, state.navigation.location, init.basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: actionResult.data,\n ...submission,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n { [match.route.id]: actionResult.data },\n undefined, // No need to send through errors since we short circuit above\n fetchLoadMatches\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n data: existingFetcher && existingFetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(staleKey, revalidatingFetcher);\n fetchControllers.set(staleKey, abortController);\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let { results, loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect(results);\n if (redirect) {\n return startRedirectNavigation(state, redirect);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: actionResult.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n\n let didAbortFetchLoads = abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n ...(didAbortFetchLoads ? { fetchers: new Map(state.fetchers) } : {}),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n // Put this fetcher into it's loading state\n let loadingFetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n ...submission,\n data: existingFetcher && existingFetcher.data,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, loadingFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n\n // Call the loader for this fetcher route match\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n fetchControllers.set(key, abortController);\n let result: DataResult = await callLoaderOrAction(\n \"loader\",\n fetchRequest,\n match,\n matches,\n router.basename\n );\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by ou our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n await startRedirectNavigation(state, result);\n return;\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n state.fetchers.delete(key);\n // TODO: In remix, this would reset to IDLE_NAVIGATION if it was a catch -\n // do we need to behave any differently with our non-redirect errors?\n // What if it was a non-redirect Response?\n updateState({\n fetchers: new Map(state.fetchers),\n errors: {\n [boundaryMatch.route.id]: result.error,\n },\n });\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: result.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n state: RouterState,\n redirect: RedirectResult,\n {\n submission,\n replace,\n isFetchActionRedirect,\n }: {\n submission?: Submission;\n replace?: boolean;\n isFetchActionRedirect?: boolean;\n } = {}\n ) {\n if (redirect.revalidate) {\n isRevalidationRequired = true;\n }\n\n let redirectLocation = createLocation(\n state.location,\n redirect.location,\n // TODO: This can be removed once we get rid of useTransition in Remix v2\n {\n _isRedirect: true,\n ...(isFetchActionRedirect ? { _isFetchActionRedirect: true } : {}),\n }\n );\n invariant(\n redirectLocation,\n \"Expected a location on the redirect navigation\"\n );\n\n // Check if this an absolute external redirect that goes to a new origin\n if (\n ABSOLUTE_URL_REGEX.test(redirect.location) &&\n isBrowser &&\n typeof window?.location !== \"undefined\"\n ) {\n let newOrigin = init.history.createURL(redirect.location).origin;\n if (window.location.origin !== newOrigin) {\n if (replace) {\n window.location.replace(redirect.location);\n } else {\n window.location.assign(redirect.location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true ? HistoryAction.Replace : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType, formData } = state.navigation;\n if (!submission && formMethod && formAction && formData && formEncType) {\n submission = {\n formMethod,\n formAction,\n formEncType,\n formData,\n };\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n if (\n redirectPreserveMethodStatusCodes.has(redirect.status) &&\n submission &&\n isMutationMethod(submission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...submission,\n formAction: redirect.location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // Otherwise, we kick off a new loading navigation, preserving the\n // submission info for the duration of this navigation\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation: {\n state: \"loading\",\n location: redirectLocation,\n formMethod: submission ? submission.formMethod : undefined,\n formAction: submission ? submission.formAction : undefined,\n formEncType: submission ? submission.formEncType : undefined,\n formData: submission ? submission.formData : undefined,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n // Call all navigation loaders and revalidating fetcher loaders in parallel,\n // then slice off the results into separate arrays so we can handle them\n // accordingly\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\"loader\", request, match, matches, router.basename)\n ),\n ...fetchersToLoad.map((f) =>\n callLoaderOrAction(\n \"loader\",\n createClientSideRequest(init.history, f.path, request.signal),\n f.match,\n f.matches,\n router.basename\n )\n ),\n ]);\n let loaderResults = results.slice(0, matchesToLoad.length);\n let fetcherResults = results.slice(matchesToLoad.length);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n request.signal,\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n request.signal,\n true\n ),\n ]);\n\n return { results, loaderResults, fetcherResults };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.push(key);\n abortFetcher(key);\n }\n });\n }\n\n function setFetcherError(key: string, routeId: string, error: any) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState({\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n });\n }\n\n function deleteFetcher(key: string): void {\n if (fetchControllers.has(key)) abortFetcher(key);\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n state.fetchers.delete(key);\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: fetcher.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): void {\n let doneKeys = [];\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n }\n }\n markFetchersDone(doneKeys);\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n state.blockers.set(key, newBlocker);\n updateState({ blockers: new Map(state.blockers) });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || ((location) => location.key);\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {\n let userMatches = matches.map((m) =>\n createUseMatchesMatch(m, state.loaderData)\n );\n let key = getScrollRestorationKey(location, userMatches) || location.key;\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions && getScrollRestorationKey && getScrollPosition) {\n let userMatches = matches.map((m) =>\n createUseMatchesMatch(m, state.loaderData)\n );\n let key = getScrollRestorationKey(location, userMatches) || location.key;\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n router = {\n get basename() {\n return init.basename;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher,\n dispose,\n getBlocker,\n deleteBlocker,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: {\n basename?: string;\n }\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let dataRoutes = convertRoutesToDataRoutes(routes);\n let basename = (opts ? opts.basename : null) || \"/\";\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n */\n async function query(\n request: Request,\n { requestContext }: { requestContext?: unknown } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method.toLowerCase();\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"head\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(request, location, matches, requestContext);\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n }: { requestContext?: unknown; routeId?: string } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method.toLowerCase();\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"head\" && method !== \"options\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n match\n );\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction, we throw\n // it to bail out and then return or throw here based on whether the user\n // returned or threw\n if (isQueryRouteResponse(e)) {\n if (e.type === ResultType.error && !isRedirectResponse(e.response)) {\n throw e.response;\n }\n return e.response;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n result = await callLoaderOrAction(\n \"action\",\n request,\n actionMatch,\n matches,\n basename,\n true,\n isRouteRequest,\n requestContext\n );\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.status,\n headers: {\n Location: result.location,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n let context = await loadRouteData(\n request,\n matches,\n requestContext,\n undefined,\n {\n [boundaryMatch.route.id]: result.error,\n }\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n let context = await loadRouteData(loaderRequest, matches, requestContext);\n\n return {\n ...context,\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n routeMatch?: AgnosticDataRouteMatch,\n pendingActionError?: RouteData\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (isRouteRequest && !routeMatch?.route.loader) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : getLoaderMatchesUntilBoundary(\n matches,\n Object.keys(pendingActionError || {})[0]\n );\n let matchesToLoad = requestMatches.filter((m) => m.route.loader);\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors: pendingActionError || null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await Promise.all([\n ...matchesToLoad.map((match) =>\n callLoaderOrAction(\n \"loader\",\n request,\n match,\n matches,\n basename,\n true,\n isRouteRequest,\n requestContext\n )\n ),\n ]);\n\n if (request.signal.aborted) {\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted`);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionError,\n activeDeferreds\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction isSubmissionNavigation(\n opts: RouterNavigateOptions\n): opts is SubmissionNavigateOptions {\n return opts != null && \"formData\" in opts;\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n to: To,\n opts?: RouterNavigateOptions,\n isFetcher = false\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponse;\n} {\n let path = typeof to === \"string\" ? to : createPath(to);\n\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n // Create a Submission on non-GET navigations\n let submission: Submission | undefined;\n if (opts.formData) {\n submission = {\n formMethod: opts.formMethod || \"get\",\n formAction: stripHashFromPath(path),\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData: opts.formData,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n let searchParams = convertFormDataToSearchParams(opts.formData);\n // Since fetcher GET submissions only run a single loader (as opposed to\n // navigation GET submissions which run all loaders), we need to preserve\n // any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId?: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: string[],\n pendingActionData?: RouteData,\n pendingError?: RouteData,\n fetchLoadMatches?: Map\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingError\n ? Object.values(pendingError)[0]\n : pendingActionData\n ? Object.values(pendingActionData)[0]\n : undefined;\n\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n let defaultShouldRevalidate =\n // Forced revalidation due to submission, useRevalidate, or X-Remix-Revalidate\n isRevalidationRequired ||\n // Clicked the same link, resubmitted a GET form\n currentUrl.toString() === nextUrl.toString() ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search;\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId = pendingError ? Object.keys(pendingError)[0] : undefined;\n let boundaryMatches = getLoaderMatchesUntilBoundary(matches, boundaryId);\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n if (match.route.loader == null) {\n return false;\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n defaultShouldRevalidate:\n defaultShouldRevalidate ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches &&\n fetchLoadMatches.forEach((f, key) => {\n if (!matches.some((m) => m.route.id === f.routeId)) {\n // This fetcher is not going to be present in the subsequent render so\n // there's no need to revalidate it\n return;\n } else if (cancelledFetcherLoads.includes(key)) {\n // This fetcher was cancelled from a prior action submission - force reload\n revalidatingFetchers.push({ key, ...f });\n } else {\n // Revalidating fetchers are decoupled from the route matches since they\n // hit a static href, so they _always_ check shouldRevalidate and the\n // default is strictly if a revalidation is explicitly required (action\n // submissions, useRevalidator, X-Remix-Revalidate).\n let shouldRevalidate = shouldRevalidateLoader(f.match, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n defaultShouldRevalidate,\n });\n if (shouldRevalidate) {\n revalidatingFetchers.push({ key, ...f });\n }\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: Parameters[0]\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n basename = \"/\",\n isStaticRequest: boolean = false,\n isRouteRequest: boolean = false,\n requestContext?: unknown\n): Promise {\n let resultType;\n let result;\n\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n let abortPromise = new Promise((_, r) => (reject = r));\n let onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n try {\n let handler = match.route[type];\n invariant(\n handler,\n `Could not find the ${type} to run on the \"${match.route.id}\" route`\n );\n\n result = await Promise.race([\n handler({ request, params: match.params, context: requestContext }),\n abortPromise,\n ]);\n\n invariant(\n result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n resultType = ResultType.error;\n result = e;\n } finally {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n\n if (isResponse(result)) {\n let status = result.status;\n\n // Process redirects\n if (redirectStatusCodes.has(status)) {\n let location = result.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n // Support relative routing in internal redirects\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let activeMatches = matches.slice(0, matches.indexOf(match) + 1);\n let routePathnames = getPathContributingMatches(activeMatches).map(\n (match) => match.pathnameBase\n );\n let resolvedLocation = resolveTo(\n location,\n routePathnames,\n new URL(request.url).pathname\n );\n invariant(\n createPath(resolvedLocation),\n `Unable to resolve redirect location: ${location}`\n );\n\n // Prepend the basename to the redirect location if we have one\n if (basename) {\n let path = resolvedLocation.pathname;\n resolvedLocation.pathname =\n path === \"/\" ? basename : joinPaths([basename, path]);\n }\n\n location = createPath(resolvedLocation);\n } else if (!isStaticRequest) {\n // Strip off the protocol+origin for same-origin absolute redirects.\n // If this is a static reques, we can let it go back to the browser\n // as-is\n let currentUrl = new URL(request.url);\n let url = location.startsWith(\"//\")\n ? new URL(currentUrl.protocol + location)\n : new URL(location);\n if (url.origin === currentUrl.origin) {\n location = url.pathname + url.search + url.hash;\n }\n }\n\n // Don't process redirects in the router during static requests requests.\n // Instead, throw the Response and let the server handle it with an HTTP\n // redirect. We also update the Location header in place in this flow so\n // basename and relative routing is taken into account\n if (isStaticRequest) {\n result.headers.set(\"Location\", location);\n throw result;\n }\n\n return {\n type: ResultType.redirect,\n status,\n location,\n revalidate: result.headers.get(\"X-Remix-Revalidate\") !== null,\n };\n }\n\n // For SSR single-route requests, we want to hand Responses back directly\n // without unwrapping. We do this with the QueryRouteResponse wrapper\n // interface so we can know whether it was returned or thrown\n if (isRouteRequest) {\n // eslint-disable-next-line no-throw-literal\n throw {\n type: resultType || ResultType.data,\n response: result,\n };\n }\n\n let data: any;\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n data = await result.json();\n } else {\n data = await result.text();\n }\n\n if (resultType === ResultType.error) {\n return {\n type: resultType,\n error: new ErrorResponse(status, result.statusText, data),\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (resultType === ResultType.error) {\n return { type: resultType, error: result };\n }\n\n if (result instanceof DeferredData) {\n return { type: ResultType.deferred, deferredData: result };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType, formData } = submission;\n init.method = formMethod.toUpperCase();\n init.body =\n formEncType === \"application/x-www-form-urlencoded\"\n ? convertFormDataToSearchParams(formData)\n : formData;\n }\n\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, value instanceof File ? value.name : value);\n }\n\n return searchParams;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n // Look upwards from the matched route for the closest ancestor\n // error boundary, defaulting to the root match\n let boundaryMatch = findNearestBoundary(matches, id);\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError) {\n error = Object.values(pendingError)[0];\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n // Prefer higher error values if lower errors bubble to the same boundary\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n } else {\n loaderData[id] = result.data;\n }\n\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError) {\n errors = pendingError;\n loaderData[Object.keys(pendingError)[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingError: RouteData | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingError,\n activeDeferreds\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: result.data,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n \" _hasFetcherDoneAnything \": true,\n };\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined) {\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route = routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\";\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponse(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results: DataResult[]): RedirectResult | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return result;\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n return (\n a.pathname === b.pathname && a.search === b.search && a.hash !== b.hash\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isQueryRouteResponse(obj: any): obj is QueryRouteResponse {\n return (\n obj &&\n isResponse(obj.response) &&\n (obj.type === ResultType.data || ResultType.error)\n );\n}\n\nfunction isValidMethod(method: string): method is FormMethod {\n return validRequestMethods.has(method as FormMethod);\n}\n\nfunction isMutationMethod(method?: string): method is MutationFormMethod {\n return validMutationMethods.has(method as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n signal: AbortSignal,\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\n// Note: This should match the format exported by useMatches, so if you change\n// this please also change that :) Eventually we'll DRY this up\nfunction createUseMatchesMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UseMatchesMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id] as unknown,\n handle: route.handle as unknown,\n };\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n//#endregion\n","/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport * as React from \"react\";\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction isPolyfill(x: any, y: any) {\n return (\n (x === y && (x !== 0 || 1 / x === 1 / y)) || (x !== x && y !== y) // eslint-disable-line no-self-compare\n );\n}\n\nconst is: (x: any, y: any) => boolean =\n typeof Object.is === \"function\" ? Object.is : isPolyfill;\n\n// Intentionally not using named imports because Rollup uses dynamic\n// dispatch for CommonJS interop named imports.\nconst { useState, useEffect, useLayoutEffect, useDebugValue } = React;\n\nlet didWarnOld18Alpha = false;\nlet didWarnUncachedGetSnapshot = false;\n\n// Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\nexport function useSyncExternalStore(\n subscribe: (fn: () => void) => () => void,\n getSnapshot: () => T,\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n getServerSnapshot?: () => T\n): T {\n if (__DEV__) {\n if (!didWarnOld18Alpha) {\n if (\"startTransition\" in React) {\n didWarnOld18Alpha = true;\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that \" +\n \"does not support useSyncExternalStore. The \" +\n \"use-sync-external-store shim will not work correctly. Upgrade \" +\n \"to a newer pre-release.\"\n );\n }\n }\n }\n\n // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n const value = getSnapshot();\n if (__DEV__) {\n if (!didWarnUncachedGetSnapshot) {\n const cachedValue = getSnapshot();\n if (!is(value, cachedValue)) {\n console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n );\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n\n // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n const [{ inst }, forceUpdate] = useState({ inst: { value, getSnapshot } });\n\n // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n useLayoutEffect(() => {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n\n // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe, value, getSnapshot]);\n\n useEffect(() => {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n const handleStoreChange = () => {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({ inst });\n }\n };\n // Subscribe to the store and return a clean-up function.\n return subscribe(handleStoreChange);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscribe]);\n\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst: any) {\n const latestGetSnapshot = inst.getSnapshot;\n const prevValue = inst.value;\n try {\n const nextValue = latestGetSnapshot();\n return !is(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n","/**\n * Inlined into the react-router repo since use-sync-external-store does not\n * provide a UMD-compatible package, so we need this to be able to distribute\n * UMD react-router bundles\n */\n\n/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @flow\n */\n\nimport * as React from \"react\";\n\nimport { useSyncExternalStore as client } from \"./useSyncExternalStoreShimClient\";\nimport { useSyncExternalStore as server } from \"./useSyncExternalStoreShimServer\";\n\nconst canUseDOM: boolean = !!(\n typeof window !== \"undefined\" &&\n typeof window.document !== \"undefined\" &&\n typeof window.document.createElement !== \"undefined\"\n);\nconst isServerEnvironment = !canUseDOM;\nconst shim = isServerEnvironment ? server : client;\n\nexport const useSyncExternalStore =\n \"useSyncExternalStore\" in React\n ? ((module) => module.useSyncExternalStore)(React)\n : shim;\n","import * as React from \"react\";\nimport type {\n AgnosticRouteMatch,\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n History,\n Location,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport type { Action as NavigationType } from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject extends NavigationContextObject {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n Router as RemixRouter,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n warning,\n UNSAFE_getPathContributingMatches as getPathContributingMatches,\n} from \"@remix-run/router\";\n\nimport type {\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n DataRouteMatch,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n AwaitContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a .\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * .\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, pathname),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\n/**\n * Returns an imperative method for changing the location. Used by s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n let activeRef = React.useRef(false);\n React.useEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(\n activeRef.current,\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`\n );\n\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history. If this is a root navigation, then we\n // navigate to the raw basename which allows the basename to have full\n // control over the presence of a trailing slash on root links\n if (basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [basename, navigator, routePathnamesJson, locationPathname]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getPathContributingMatches(matches).map((match) => match.pathnameBase)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let dataRouterStateContext = React.useContext(DataRouterStateContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n let remainingPathname =\n parentPathnameBase === \"/\"\n ? pathname\n : pathname.slice(parentPathnameBase.length) || \"/\";\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" does not have an element. ` +\n `This means it will render an with a null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterStateContext || undefined\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorElement() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own \n errorElement props on \n <Route>\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (state.location !== props.location) {\n return {\n error: props.error,\n location: props.location,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error || state.error,\n location: state.location,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n match.route.errorElement\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState?: RemixRouter[\"state\"]\n): React.ReactElement | null {\n if (matches == null) {\n if (dataRouterState?.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id]\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for the current errors: ${errors}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n let error = match.route.id ? errors?.[match.route.id] : null;\n // Only data routers handle errors\n let errorElement = dataRouterState\n ? match.route.errorElement || \n : null;\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => (\n \n {error\n ? errorElement\n : match.route.element !== undefined\n ? match.route.element\n : outlet}\n \n );\n // Only wrap in an error boundary within data router usages when we have an\n // errorElement on this route. Otherwise let it bubble up to an ancestor\n // errorElement\n return dataRouterState && (match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n}\n\nenum DataRouterStateHook {\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return {\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n };\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches() {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () =>\n matches.map((match) => {\n let { pathname, params } = match;\n // Note: This structure matches that created by createUseMatchesMatch\n // in the @remix-run/router , so if you change this please also change\n // that :) Eventually we'll DRY this up\n return {\n id: match.route.id,\n pathname,\n params,\n data: loaderData[match.route.id] as unknown,\n handle: match.route.handle as unknown,\n };\n }),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n\n let route = React.useContext(RouteContext);\n invariant(route, `useActionData must be used inside a RouteContext`);\n\n return Object.values(state?.actionData || {})[0];\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router } = useDataRouterContext(DataRouterHook.UseBlocker);\n let [blockerKey] = React.useState(() => String(++blockerId));\n\n let blockerFunction = React.useCallback(\n (args) => {\n return typeof shouldBlock === \"function\"\n ? !!shouldBlock(args)\n : !!shouldBlock;\n },\n [shouldBlock]\n );\n\n let blocker = router.getBlocker(blockerKey, blockerFunction);\n\n // Cleanup on unmount\n React.useEffect(\n () => () => router.deleteBlocker(blockerKey),\n [router, blockerKey]\n );\n\n return blocker;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import * as React from \"react\";\nimport type {\n TrackedPromise,\n InitialEntry,\n Location,\n MemoryHistory,\n Router as RemixRouter,\n RouterState,\n To,\n} from \"@remix-run/router\";\nimport {\n Action as NavigationType,\n AbortedDeferredError,\n createMemoryHistory,\n invariant,\n parsePath,\n stripBasename,\n warning,\n} from \"@remix-run/router\";\nimport { useSyncExternalStore as useSyncExternalStoreShim } from \"./use-sync-external-store-shim\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n RouteMatch,\n RouteObject,\n Navigator,\n NonIndexRouteObject,\n RelativeRoutingType,\n} from \"./context\";\nimport {\n LocationContext,\n NavigationContext,\n DataRouterContext,\n DataRouterStateContext,\n AwaitContext,\n} from \"./context\";\nimport {\n useAsyncValue,\n useInRouterContext,\n useNavigate,\n useOutlet,\n useRoutes,\n _renderMatches,\n} from \"./hooks\";\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n}\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n}: RouterProviderProps): React.ReactElement {\n // Sync router state to our component state to force re-renders\n let state: RouterState = useSyncExternalStoreShim(\n router.subscribe,\n () => router.state,\n // We have to provide this so React@18 doesn't complain during hydration,\n // but we pass our serialized hydration data into the router so state here\n // is already synced with what the server saw\n () => router.state\n );\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a